您可以匹配双引号内字符串的所有匹配项,然后计算匹配项中的variant
个匹配项:
String s = "variant \"if and only if 5 divides by i without remainder, then it prints \\\"i + \\\" variant: \\\" + variant\\\"\" variant";
Pattern pattern = Pattern.compile("(?s)(?<!\\\\)(?:\\\\{2})*\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"");
Matcher matcher = pattern.matcher(s);
int count = 0;
while (matcher.find()){
count += matcher.group().split("variant", -1).length-1;
}
System.out.println(count);
请看online demo.因此,variant "if and only if 5 divides by i without remainder, then it prints \"i + \" variant: \" + variant\"" variant
字符串包含两个variant
匹配项.
正则表达式是(?<!\\)(?:\\{2})*"[^"\\]*(?:\\.[^"\\]*)*"
,请参见.com/r/IohlS8/2" rel="nofollow noreferrer">its demo.
Details:
(?<!\\)
--不允许\
紧靠左侧
(?:\\{2})*
-零个或多个双反斜杠
"
-"
个字符
[^"\\]*
-"
和\
以外的零个或更多字符
(?:\\.[^"\\]*)*
-任何转义字符的零个或多个序列,然后是\
和"
以外的零个或多个字符
"
-"
个字符.