0

我需要一个在两个字符串之间匹配但仅采用内部块的正则表达式。我尝试使用不情愿的量词,但它不起作用。

这是一个例子:

<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>

提前致谢..

4

2 回答 2

0

不建议使用正则表达式解析 HTML。

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

html.replaceAll
           ("(?i)(?s).*?(<div\\s*color.*?From:.*?Sent:.*?To:.*?</div>).*", "$1");
于 2013-04-26T17:56:42.960 回答
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;
   }
于 2013-04-26T18:09:57.133 回答