GWT-2.1 RegEx类来解析自由文本

问题描述

| 我在
com.google.gwt.regexp.shared.RegExp
类中苦苦挣扎,只想从字符串中解析电话号码并获得一个数字的所有出现,但似乎只能获得第一个出现。.我知道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
提前致谢。 伊恩..     

解决方法

        您将不得不循环,再次应用该模式,直到不返回任何内容。为此,您首先必须使用\“ global \”标志:
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));
}
如果您认为它有点“魔术”或“ kludgy”(有点像),我建议您阅读有关JavaScript
RegExp
对象的文档,因为GWT中的
RegExp
类是直接映射其中的一个:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/exec(JS中的示例代码与上述示例非常相似)。     ,        将正则表达式从
[\\+]?[0-9.\" \"-]{8,}
([\\+]?[0-9.\" \"-]{8,})
有关更多详细信息,请参见捕获组。