匹配用引号括起来的模式

时间:2014-04-08 08:07:13

标签: java regex

我正在尝试获得与模式匹配的组。 输入字符串是类等于

'one and two!' and 'three or four five' and 'six'

我试过以下模式。但它匹配且不在单引号内

(?:'(?:\S*\s*)*(and|or)+(?:\s*\S*)*')+

我想要像

这样的群组
'one and two!'
'three or four five'

应该匹配具有和/或单引号内的所有字符串。在单引号内,它可以有特殊字符和许多空格等

我如何改变上面的模式?

2 个答案:

答案 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以获得编写高效正则表达式的技巧。