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