与
this有关的问题
我有一个字符串
a\;b\\;c;d
在Java中看起来像
String s = "a\\;b\\\\;c;d"
我需要用分号按照以下规则拆分它:
>如果分号前面有反斜杠,则不应将其视为分隔符(在a和b之间).
>如果反斜杠本身被转义,因此不会以分号方式转义,那分号应该是分隔符(在b和c之间).
因此,如果在它之前存在零或偶数个反斜杠,则应将分号视为分隔符.
例如上面,我想得到以下字符串(java编译器的双反斜杠):
a\;b\\ c d
解决方法
你可以使用正则表达式
(?:\\.|[^;\\]++)*
匹配未转义分号之间的所有文本:
List<String> matchList = new ArrayList<String>(); try { Pattern regex = Pattern.compile("(?:\\\\.|[^;\\\\]++)*"); Matcher regexMatcher = regex.matcher(subjectString); while (regexMatcher.find()) { matchList.add(regexMatcher.group()); }
说明:
(?: # Match either... \\. # any escaped character | # or... [^;\\]++ # any character(s) except semicolon or backslash; possessive match )* # Repeat any number of times.
由于嵌套量词,占有性匹配()对于避免灾难性回溯非常重要.