regex Java正则表达式查找双引号内出现的所有单词

hyrbngr7  于 2022-11-26  发布在  Java
关注(0)|答案(1)|浏览(147)

this是我的正则表达式,我试图用这个正则表达式找到所有出现在双引号内的字符串“variant”,但如果有两个出现在双引号内,它将只取最后一个。我的正则表达式基本上试图找到写在双引号内的字符串“variant”,我试着这样写,但它也不工作:这是我的代码:

String str_regex = "\\".*(variant).*\\"";
Matcher str_matcher = Pattern.compile(str_regex).matcher(joined);
while(str_matcher.find()) {
    System.out.println(str_matcher.group());
}
vfh0ocws

vfh0ocws1#

您可以匹配双引号内字符串的所有匹配项,然后计算匹配项内的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})*"[^"\\]*(?:\\.[^"\\]*)*",请参阅its demo

  • 详细数据 *:
  • (?<!\\)-左侧不允许立即出现\
  • (?:\\{2})*-零个或多个双反斜杠
  • 一个"字符
  • [^"\\]*-除"\之外的零个或多个字符
  • (?:\\.[^"\\]*)*-零个或多个转义字符序列,然后是零个或多个除\"之外的字符
  • "-一个"字符

相关问题