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

时间:2015-01-01 10:49:01

标签: java regex

我有以下文字:

bla [string1] bli [string2]

我喜欢在java中的循环中将string1和string2与regex匹配。

怎么做?

到目前为止我的代码,它只匹配第一个string1,但不匹配字符串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
        }

2 个答案:

答案 0 :(得分:1)

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

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以匹配多次以返回所有匹配。

答案 1 :(得分:1)

你的方法很混乱。编写正则表达式,使其与一个模式中的两个[....]序列匹配,或多次调用find。您当前的尝试有一个正则表达式&#34;发现&#34;只有一个[...]序列。

尝试这样的事情:

    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数组来提取所提取的字符串。

(在这种情况下,你不需要任何花哨的后视模式。丑陋的匈牙利符号&#34;在Java中皱眉,所以不要习惯使用它。)