字符串中的多个正则表达式匹配

multiple regex matches in a string

我有以下文字:

bla [string1] bli [string2]

我喜欢在 java 的循环中用正则表达式匹配 string1 和 string2。

怎么办?

到目前为止,我的代码只匹配第一个字符串 1,但不匹配字符串 2。

String sRegex="(?<=\[).*?(?=\])";
        Pattern p = Pattern.compile(sRegex); // create the pattern only once,
        Matcher m = p.matcher(sFormula);
        if (m.find()) 
        {
            String sString1 = m.group(0); 
            String sString2 = m.group(1); // << no match
        }

您的正则表达式未使用任何捕获的组因此此调用抛出异常:

m.group(1);

您可以只使用:

String sRegex="(?<=\[)[^]]*(?=\])";
Pattern p = Pattern.compile(sRegex); // create the pattern only once,
Matcher m = p.matcher(sFormula);
while (m.find()) {
   System.out.println( m.group() );
}

另外 if 应替换为 while 以匹配多次到 return 所有匹配。

你的方法很混乱。要么编写你的正则表达式,使其匹配一个模式中的两个 [....] 序列,要么多次调用 find。您当前的尝试有一个 "finds" 只有一个 [...] 序列的正则表达式。

尝试这样的事情:

    Pattern p = Pattern.compile("\[([^\]]+)]");
    Matcher m = p.matcher(formula);
    if (m.find()) {
        String string1 = m.group(0);
        if (m.find(m.end()) {
            String string2 = m.group(0);
        }
    }

或者对提取的字符串使用循环和 String 数组进行概括。

(在这种情况下你不需要任何花哨的后视模式。丑陋的"hungarian notation"在Java中皱眉,所以改掉使用它的习惯。)