HOw使用Java中的正则表达式来解析一个div?

可能重复:
RegEx匹配除XHTML自包含标签之外的开放标签

我在使用java解析标签时遇到了麻烦。

目标:

我的目标是解析完整的div标签及其所有内容,即使它包含子标签,

比如来自HTML

<h2>some random text</h2>
<div id="outerDiv">
  some text
      <div>
          some more text
      </div>
  last text
</div>
<div> some random div <b>bold</b></div>

我想解析它的所有内容直到它的结束标签,即:

<div id="outerDiv">
      some text
          <div>
              some more text
          </div>
      last text
    </div>

但是,我现在得到的,是在这种形式或任何其他随机格式(根据我试着用我的表达:))的变化,

请帮助我改进我的正则表达式,以便完美地解析具有特定ID的div及其内容。

这里是我的表达(很多括号只是为了更安全:) :):

((<div.*(class="afs")(.)*?>)((.)*?)(((<div(.)*?>)((.)*?)((</div>){1}))*?)((</div>){1}))

这是我的java代码:

package rexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Rexp {

    public static void main(String[] args) {

        CharSequence inputStr = "asdasd<div class="af">sasa<div><div><div class="afs">as</div>qwessa</div></div></div>asd";


        Pattern pattern = Pattern.compile("((<div.*(class="afs")(.)*?>)((.)*?)(((<div(.)*?>)((.)*?)((</div>){1}))*?)((</div>){1}))");
        Matcher matcher = null;
        matcher = pattern.matcher(inputStr);

        if (matcher.find()) {
            System.out.println("Matched "+matcher.group(1));
        } else {
            System.out.println("Not Matched");
        }
    }
}

我认为正则表达式是这个错误的工具。 我会考虑使用词法分析器/解析器库,或仅使用第三方HTML解析库。 一个快速的谷歌显示了几个在那里。


正则表达式不适用于HTML解析,因为HTML不是常规语言。 你最好使用合适的HTML解析器库,比如jsoup或者JTidy。

有关更多Java HTML分析器引用,另请参阅此问题。

链接地址: http://www.djcxy.com/p/76871.html

上一篇: HOw to parse a div using Regular Expressions in java?

下一篇: Regex to strip tags, retain CDATA