2017-02-08 8 views
2

Я хочу получить строки из глобальной строки через Matcher & Образец с использованием REGEX.Получение нескольких совпадений с помощью регулярных выражений

String str = "<strong>ABC</strong>123<strong>DEF</strong>" 
Pattern pattern = Pattern.compile("<strong>(.*)</strong>"); 
Matcher matcher = pattern.matcher(str); 

Моя проблема заключается в том, что сличитель дает мне только один матч, который находится внутри глобального тега сильным:

ABC</strong>123<strong>DEF 

Моя цель состоит в том, чтобы получить 2 матча:

ABC 
DEF 

благодарю вас очень подходит для вас.

ответ

2

Вам нужен нон жадный регулярное выражение:

Pattern pattern = Pattern.compile("<strong>.*?</strong>"); 

Используйте ? указать не жадный. Это означает, что он будет соответствовать первый матч он находит вместо самой внешней матча ...

Если вы хотите только ABC и DEF, то вы можете сделать что-то вроде этого, используя lookaheads и просмотра назад:

String str = "<strong>ABC</strong>123<strong>DEF</strong>"; 
Pattern pattern = Pattern.compile("((?<=<strong>).*?(?=</strong>))"); 
Matcher matcher = pattern.matcher(str); 
while(matcher.find()) 
{ 
    System.out.println(matcher.group()); 
} 

Если вы делаете поиск Google, вы должны быть в состоянии найти информацию о lookaheads и ...

просмотра назад
+0

Если вы хотите только ABC и DEF, тогда вы могут использовать группы захвата: Pattern pattern = Pattern.compile ("(. *?)"); , а затем matcher.group (1) – chaim

2

я рекомендую использовать JSOUP разобрать ваш HTML код вместо регулярных выражений, как

Document doc = Jsoup.parse("<strong>ABC</strong>123<strong>DEF</strong>"); 

    // select your tag 
    Elements elements = doc.select("strong"); 

    // get the iterator to traverse all elements 
    Iterator<Element> it = elements.iterator(); 

    // loop through all elements and fetch their text 
    while (it.hasNext()) { 
     System.out.println(it.next().text()); 
    } 

Выход:

ABC 
DEF 

или получить выход в одну строку

Document doc = Jsoup.parse("<strong>ABC</strong>123<strong>DEF</strong>"); 
    Elements elements = doc.select("strong"); 
    System.out.println(elements.text()); 

Выход:

ABC DEF 

Download Jsoup и добавить его в качестве зависимости

+0

В случае, если 'Jsoup' имеет множество других функций, например, для загрузки содержимого html с помощью' Jsoup.connect (URL) 'и других функций синтаксического анализа и выбора –