![](/img/trans.png)
[英]Java Regex: Match text between two strings with boundary conditions
[英]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.