Getting multiple matches via regex

前端 未结 2 832
-上瘾入骨i
-上瘾入骨i 2021-01-21 22:07

I want to retrieve a strings from a global string via Matcher & Pattern using REGEX.

String str = \"ABC123DEF<         


        
相关标签:
2条回答
  • 2021-01-21 22:43

    I recommend to use JSOUP to parse your HTML code instead of regex as

        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());
        }
    

    Output :

    ABC
    DEF
    

    or get Output as single string

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

    Output:

    ABC DEF
    

    Download Jsoup and add it as a dependency

    0 讨论(0)
  • 2021-01-21 22:48

    You need a non greedy regex:

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

    Use ? to specify non greedy. This means it will match the first match it finds instead of the outer most match...

    If you only want ABC and DEF then you can do something like this using lookaheads and lookbehinds:

    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());
    }
    

    If you do a google search you should be able to find information on lookaheads and lookbehinds...

    0 讨论(0)
提交回复
热议问题