2013-06-08 2 views
1

Я хочу найти все совпадения «code» в моей строке ввода (с GWT RegExp). Когда я вызываю метод «RegExp.exec (inputStr)» он возвращает только первый матч, даже когда я называю это несколько раз:GWT RegExp - несколько совпадений

String input = "ff <code>myCode</code> ff <code>myCode2</code> dd <code>myCode3</code>"; 

String patternStr = "<code[^>]*>(.+?)</code\\s*>"; 

// Compile and use regular expression 
RegExp regExp = RegExp.compile(patternStr); 
MatchResult matcher = regExp.exec(inputStr); 

boolean matchFound = (matcher != null); // equivalent to regExp.test(inputStr); 
if (matchFound) { 
    // Get all groups for this match 
    for (int i=0; i<matcher.getGroupCount(); i++) { 
     String groupStr = matcher.getGroup(i); 
     System.out.println(groupStr); 
    } 
} 

Как я могу получить все матчи?

Редактировать: Как и greedybuddha отметил: Регулярное выражение действительно не подходит для синтаксического анализа (X) HTML. Я попробовал JSOUP, и это намного более удобно, чем с регулярным выражением. Теперь мой код с jsoup выглядит так. Я переименовывать все теги кода и применять их в CSS-класс:

String input = "ff<code>myCode</code>ff<code>myCode2</code>"; 
Document doc = Jsoup.parse(input, "UTF-8"); 

Elements links = doc.select("code"); // a with href 

for(Element link : links){ 
    System.out.println(link.html()); 
    link.tagName("pre"); 
    link.addClass("prettify"); 
} 

System.out.println(doc); 

ответ

1

Compile регулярное выражение с «г» flag, для глобального согласования.

RegExp regExp = RegExp.compile(patternStr,"g"); 

Я думаю, вы также хотите, «м» для согласования многострочного, "gm".

Как говорится, для разбора HTML/XML вам следует рассмотреть возможность использования JSoup или другой альтернативы.

+0

Спасибо, я переключился на JSOUP, и это намного удобнее! – jan

Смежные вопросы