如何在正则表达式中添加多个匹配条件

时间:2013-01-31 13:10:59

标签: java regex

我有一个像这样的字符串:String x = "return function ('ABC','DEF')";

我正在使用它:

Pattern pattern = Pattern.compile("'(.*?)'");
Matcher matcher = pattern.matcher(formula);
while (matcher.find()) {
    System.out.println("------> " + matcher.group();
}

在单引号之间检索字符串。

我的问题是:我如何调整这个正则表达式,以便检查单引号和字符串之间的字符串,如“,'DEF'”(意思是哪个以'开头,'结束')?

3 个答案:

答案 0 :(得分:1)

您可以使用正则表达式模式:

Pattern.compile(",?'(.*?)'");

,?表示0或1个逗号。的?贪婪,所以如果有逗号,它将被包含在比赛中。

所以:这将匹配:

  • 一个逗号,后跟一个用单引号括起来的字符串
  • OR ..只包含在单引号中的字符串

答案 1 :(得分:1)

这种模式可以做你想要的:

"(?:,\s*)?'[^']*'"

?表示第一组将匹配零次或一次。

我使用了(?:...),因为这是一个非捕获组。当您不需要捕获匹配的那部分时,最好使用它。

此外,我将.*?替换为[^']*,这意味着单引号字符串包含任何不是单引号的内容。这比.*?更有效,并且不太可能导致你的正则表达式出错。

(注意:这个正则表达式允许逗号和字符串的开头之间有空格。首先看你的例子,我认为你的例子也是如此。但是现在我看到它不是。但是,根据您的数据情况,这可能很有用。)

答案 2 :(得分:1)

您可以使用此模式:

'[^']+'|"[^"]+"

只需匹配空引用的字符串,将“+”更改为“*”。

请参阅test