0

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

我正在使用这个:

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

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

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

4

3 回答 3

1

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

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

,?表示 0 或 1 个逗号。这 ?是贪心的,所以如果有逗号,它将被包含在匹配中。

所以:这将匹配:

  • 逗号,后跟用单引号括起来的字符串
  • OR.. 仅用单引号括起来的字符串
于 2013-01-31T13:15:00.390 回答
1

这种模式应该做你想做的事:

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

?意味着第一组将匹配零次或一次。

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

此外,我替换.*?[^']*,这意味着单引号字符串包含任何不是单引号的内容。与.*?.

(注意:这个正则表达式允许逗号和字符串开头之间有空格。起初看你的例子,我认为你的例子是这样的。但现在我发现它不是。不过,那可能是有用取决于你的数据是什么样的)。

于 2013-01-31T13:18:40.320 回答
1

您可以使用此模式:

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

只是为了匹配带引号的空字符串,将“+”更改为“*”。

测试

于 2013-01-31T13:18:55.063 回答