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

时间:2019-04-02 05:51:36

标签: java regex

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

我在下面尝试过,但始终返回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

3 个答案:

答案 0 :(得分:2)

您可以利用\G锚点进行匹配,该锚点在上一个匹配项的末尾声明位置,并在组中捕获您的值:

(?:\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

答案 1 :(得分:1)

我建议您分两步实现:

步骤1:捕获()之间的所有内容

使用正则表达式:^\S+\((.*)\)$

Demo

第一个也是唯一一个捕获组将包含必需的文本。

步骤2:,上拆分捕获的字符串,从而独立产生所有逗号分隔的参数。

答案 2 :(得分:0)

看到这个你可能会明白

  

([\w]+),([\w]+),([\w]+)

演示https://rubular.com/r/9HDIwBTacxTy2O