我需要一个匹配两个字符串的正则表达式,但只接受内部块。我尝试使用不情愿的量词,但它没有用。
以下是一个例子:
<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>
结尾,但我需要在括号内指定的模式上方和下方。
所以我需要输出:
<div color="r">
<b>From:</b>xyz<br>
<b>Sent:</b>xyz PM<br>
<b>To:</b>xyz<br><br>
</div>
提前致谢..
答案 0 :(得分:0)
不建议使用正则表达式解析HTML。
如果您知道自己在做什么,那么可以使用以下String#replaceAll
来电:
html.replaceAll
("(?i)(?s).*?(<div\\s*color.*?From:.*?Sent:.*?To:.*?</div>).*", "$1");
答案 1 :(得分:0)
试试这个。我正在扩展我的评论,所以你会明白我的意思:
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;
}