GWT - 2.1 класс RegEx для разбора свободного текста - PullRequest
4 голосов
/ 12 июня 2011

Я борюсь с классом com.google.gwt.regexp.shared.RegExp и просто хочу разобрать телефонные номера из строки и получить ВСЕ вхождения числа, но, кажется, только в состоянии получить 1-е вхождения ... Я знаю, что есть небольшая разница в регулярном выражении между Java (где это работает) и GWT.

String freeText = "Theo Powell<5643321309>, Robert Roberts<9653768972>, Betty Wilson<6268281885>, Brandon Anderson<703203115>";
MatchResult matchResult = RegExp.compile("[\+]?[0-9." "-]{8,}").exec(freeText);
int groupCount = matchResult.getGroupCount(); // result = 1
String s = matchResult.getGroup(0); //result = 5643321309

Заранее спасибо.

Ian ..

Ответы [ 2 ]

9 голосов
/ 12 июня 2011

Вам придется зацикливаться, применяя шаблон снова, пока он ничего не вернет. Для этого сначала нужно использовать «глобальный» флаг:

ArrayList<String> matches = new ArrayList<String>();
RegExp pattern = RegExp.compile("[\+]?[0-9. -]{8,}", "g");
for (MatchResult result = pattern.exec(freeText); result != null; result = pattern.exec(freeText)) {
   matches.add(result.getGroup(0));
}

Если вы думаете, что это немного "волшебно" или "неаккуратно" (что-то вроде этого), я бы посоветовал прочитать документы об объекте JavaScript RegExp, так как класс RegExp в GWT является прямым отображением из этого: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/exec (пример кода в JS очень похож на приведенный выше).

1 голос
/ 12 июня 2011

Измените регулярное выражение с

[\+]?[0-9." "-]{8,}

на

([\+]?[0-9." "-]{8,})

Подробнее см. Группы захвата .

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