gpt4 book ai didi

java - 正则表达式查找2个字符之间的字符串,以逗号分隔

转载 作者:行者123 更新时间:2023-12-01 19:40:47 26 4
gpt4 key购买 nike

我是正则表达式新手,我想找到两个字符之间的字符串,

我在下面尝试过,但它总是返回 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

最佳答案

您可以使用 \G anchor 进行匹配,该 anchor 断言上一场比赛结束时的位置,并捕获组中的值:

(?:\bmyFunction\(|\G(?!^))([^,]+)(?:\h*,\h*)?(?=[^)]*\))

在 Java 中:

String regex = "(?:\\bmyFunction\\(|\\G(?!^))([^,]+)(?:\\h*,\\h*)?(?=[^)]*\\))";

说明

  • (?: 非捕获组
    • \bmyFunction\( 单词边界,以防止匹配成为较大单词的一部分,匹配 myFunction 和左括号 (
    • | 或者
    • \G(?!^) 在上一个匹配的末尾断言位置,而不是在字符串的开头
  • ) 关闭非捕获组
  • ([^,]+) 在组中捕获匹配 1+ 次的非逗号
  • (?:\h*,\h*)? 可选择匹配由 0+ 水平空白字符包围的逗号
  • (?=[^)]*\)) 正向前瞻,断言右侧是右括号 )

Regex demo | Java demo

例如:

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

关于java - 正则表达式查找2个字符之间的字符串,以逗号分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55467780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com