簡體   English   中英

Java Regex:嚴格匹配內部塊中兩個字符串之間的文本

[英]Java Regex: Match text between two strings strictly inner block

我需要一個正則表達式,它可以在兩個字符串之間進行匹配,但是僅使用內部塊。 我嘗試使用勉強的量詞,但沒有用。

這是一個例子:

<div>
    Hi
</div>
<div class = "quote">
    This is mail.
    <hr tabindex="-1">
    <div color="r">
        <b>From:</b>xyz<br>
        <b>Sent:</b>xyz PM<br>
        <b>To:</b>xyz<br><br>
    </div>
</div>

我使用了此正則表達式,但不起作用(與DOTALL匹配,因此“。”也與換行符匹配)

<div.*(From:.*Sent:.*To:.*)*?</div>

由於輸入文本以<div>開頭和</div>結束,因此regex上面的內容可以匹配所有內容,但是我需要括號內指定的模式的上方和下方。

所以我需要的輸出是:

<div color="r">
        <b>From:</b>xyz<br>
        <b>Sent:</b>xyz PM<br>
        <b>To:</b>xyz<br><br>
</div>

提前致謝..

不建議使用正則表達式解析HTML。

如果您知道自己在做什么,則可以使用以下String#replaceAll調用:

html.replaceAll
           ("(?i)(?s).*?(<div\\s*color.*?From:.*?Sent:.*?To:.*?</div>).*", "$1");

嘗試這個。 我的評論在擴大,因此您將明白我的意思:

  public String findText(String htmlString) {
    Pattern patt = Pattern.compile("<div.*</div>");
      Matcher m = patt.matcher(htmlString);
      while (m.find()) {
        String text = m.group(1);
        // check whether the value of text is the div you want
        if (text.indexOf("color") < text.indexOf(">")) { //... or something similar
           return (text);
        }
      }
    return null;
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM