如何在Java正则表达式中表达":"但不以"\"开头?

jju*_*uma 8 java regex

如何在Java正则表达式中表达"not preceded by"?例如,我想搜索":",但只有当它不是直接前面的"\"时.我怎样才能做到这一点?

Mar*_*ers 16

使用负面的lookbehind:

"(?<!\\\\):"
Run Code Online (Sandbox Code Playgroud)

四个反斜杠的原因是:

  • 反斜杠是正则表达式中的特殊字符,因此您需要使用正则表达式\\来匹配单个反斜杠.
  • 反斜杠必须在Java字符串中进行转义,因此必须将上述每个反斜杠写为\\,总共四个.

示例代码:

Pattern pattern = Pattern.compile("(?<!\\\\):");
Matcher matcher = pattern.matcher("foo\\:x bar:y");
if (matcher.find()) {
    System.out.println(matcher.start());
}
Run Code Online (Sandbox Code Playgroud)

输出:

10
Run Code Online (Sandbox Code Playgroud)