String linkPattern = "\\[[A-Za-z_0-9]+\\]";
String text = "[build]/directory/[something]/[build]/";
RegExp reg = RegExp.compile(linkPattern,"g");
MatchResult matchResult = reg.exec(text);
for (int i = 0; i < matchResult.getGroupCount(); i++) {
System.out.println("group" + i + "=" + matchResult.getGroup(i));
}
我试图让所有被方形手镯封装的块形成一个路径字符串: 我只得到group0 =“[build]”我想要的是: 1:“[build]”2:“[something]”3:“[build]”
编辑:
只是为了清楚括号内的单词是用随机文本生成的
public static String genText()
{
final int LENGTH = (int)(Math.random()*12)+4;
StringBuffer sb = new StringBuffer();
for (int x = 0; x < LENGTH; x++)
{
sb.append((char)((int)(Math.random() * 26) + 97));
}
String str = sb.toString();
str = str.substring(0,1).toUpperCase() + str.substring(1);
return str;
}
编辑2: JDK工作正常,GWT RegExp给出了这个问题
解决: 来自Didier L的回答
String linkPattern = "\\[[A-Za-z_0-9]+\\]";
String result = "";
String text = "[build]/directory/[something]/[build]/";
RegExp reg = RegExp.compile(linkPattern,"g");
MatchResult matchResult = null;
while((matchResult=reg.exec(text)) != null){
if(matchResult.getGroupCount()==1)
System.out.println( matchResult.getGroup(0));
}
答案 0 :(得分:2)
我不知道你使用的是哪个正则表达式库,但使用JDK中的那个正如
所述。String linkPattern = "\\[[A-Za-z_0-9]+\\]";
String text = "[build]/directory/[something]/[build]/";
Pattern pat = Pattern.compile(linkPattern);
Matcher mat = pat.matcher(text);
while (mat.find()) {
System.out.println(mat.group());
}
输出:
[build]
[something]
[build]
答案 1 :(得分:1)
尝试:
String linkPattern = "(\\[[A-Za-z_0-9]+\\])*";
编辑:
第二次尝试:
String linkPattern = "\\[(\\w+)\\]+"
第三次尝试,请参阅http://rubular.com/r/eyAQ3Vg68N