我正在尝试获得与模式匹配的组。 输入字符串是类等于
'one and two!' and 'three or four five' and 'six'
我试过以下模式。但它匹配且不在单引号内
(?:'(?:\S*\s*)*(and|or)+(?:\s*\S*)*')+
我想要像
这样的群组'one and two!'
'three or four five'
应该匹配具有和/或单引号内的所有字符串。在单引号内,它可以有特殊字符和许多空格等
我如何改变上面的模式?
答案 0 :(得分:1)
试试这个
"'.+?(\\s(and|or)\\s).+?'"
答案 1 :(得分:1)
如果您的单引号中有没有单引号,那么您可以使用以下模式:
final Pattern PATTERN = Pattern.compile("('[^']+')( (and|or) )?");
然后您将在列表中收集所有匹配项:
final List<String> matches = new ArrayList<>();
final Matcher m = PATTERN.matcher(input);
while (m.find())
matches.add(m.group(1));
如果有潜在的未转义单引号,那么这对于正则表达式是不可行的。如果可以转义,那么请查看here以获得编写高效正则表达式的技巧。