Слова внутри квадратных скобок - RegExp - PullRequest
3 голосов
/ 14 февраля 2012
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: "[что-то] "3:" [сборка] "

РЕДАКТИРОВАТЬ:
просто для ясности слова в скобках генерируются со случайным текстом

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 дает эту проблему

решено: Ответ Дидье 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));
}

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

Я не знаю, какую библиотеку регулярных выражений вы используете, но, используя библиотеку из 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 голос
/ 14 февраля 2012

Попробуйте:

String linkPattern = "(\\[[A-Za-z_0-9]+\\])*";

EDIT:

Вторая попытка:

String linkPattern = "\\[(\\w+)\\]+"

Третья попытка, см. http://rubular.com/r/eyAQ3Vg68N

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...