我是正则表达式的新手,我想在两个字符之间找到一个字符串,
我在下面尝试过,但始终返回false。我可以知道这有什么问题吗?
public static void main(String[] args) {
String input = "myFunction(hello ,world, test)";
String patternString = "\\(([^]]+)\\)";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
输入:
myFunction(hello,world,test)
,其中myFunction可以是任何字符。开始之前(可以有任何字符。
输出:
hello
world
test
答案 0 :(得分:2)
您可以利用\G
锚点进行匹配,该锚点在上一个匹配项的末尾声明位置,并在组中捕获您的值:
(?:\bmyFunction\(|\G(?!^))([^,]+)(?:\h*,\h*)?(?=[^)]*\))
在Java中:
String regex = "(?:\\bmyFunction\\(|\\G(?!^))([^,]+)(?:\\h*,\\h*)?(?=[^)]*\\))";
说明
(?:
非捕获组
\bmyFunction\(
的单词边界以防止匹配项成为较大单词的一部分,请匹配myFunction和开括号(
|
或\G(?!^)
在上一个比赛的末尾而不是字符串的开头声明位置)
关闭非捕获组([^,]+)
在匹配1次以上而不是逗号的组中捕获(?:\h*,\h*)?
(可选)匹配由0+个水平空格字符包围的逗号(?=[^)]*\))
正向前进,断言右边是右括号)
例如:
String patternString = "(?:\\bmyFunction\\(|\\G(?!^))([^,]+)(?:\\h*,\\h*)?(?=[^)]*\\))";
String input = "myFunction(hello ,world, test)";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
结果
hello
world
test
答案 1 :(得分:1)
我建议您分两步实现:
步骤1:捕获(
和)
之间的所有内容
使用正则表达式:^\S+\((.*)\)$
第一个也是唯一一个捕获组将包含必需的文本。
步骤2:在,
上拆分捕获的字符串,从而独立产生所有逗号分隔的参数。
答案 2 :(得分:0)