我有一个像这样的字符串:String x = "return function ('ABC','DEF')";
我正在使用它:
Pattern pattern = Pattern.compile("'(.*?)'");
Matcher matcher = pattern.matcher(formula);
while (matcher.find()) {
System.out.println("------> " + matcher.group();
}
在单引号之间检索字符串。
我的问题是:我如何调整这个正则表达式,以便检查单引号和字符串之间的字符串,如“,'DEF'”(意思是哪个以'开头,'结束')?
答案 0 :(得分:1)
您可以使用正则表达式模式:
Pattern.compile(",?'(.*?)'");
,?
表示0或1个逗号。的?贪婪,所以如果有逗号,它将被包含在比赛中。
所以:这将匹配:
答案 1 :(得分:1)
这种模式可以做你想要的:
"(?:,\s*)?'[^']*'"
?
表示第一组将匹配零次或一次。
我使用了(?:...)
,因为这是一个非捕获组。当您不需要捕获匹配的那部分时,最好使用它。
此外,我将.*?
替换为[^']*
,这意味着单引号字符串包含任何不是单引号的内容。这比.*?
更有效,并且不太可能导致你的正则表达式出错。
(注意:这个正则表达式允许逗号和字符串的开头之间有空格。首先看你的例子,我认为你的例子也是如此。但是现在我看到它不是。但是,根据您的数据情况,这可能很有用。)
答案 2 :(得分:1)