我有以下文字:
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
}
答案 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中皱眉,所以不要习惯使用它。)