关于使用Regex和Java解析HTML的问题

Elh*_*ham 4 java regex parsing

我有一个关于使用Java和Regex查找html标签的问题.

我使用下面的代码来查找HTML中的所有标签,documentURL显然是HTML内容.

find方法返回true,这意味着它可以在HTML中找到一些东西,但matches()方法总是返回false,我对此完全和完全不解.

我也提到了Java文档,但找不到我的答案.

使用Matcher的正确方法是什么?

    Pattern keyLineContents = Pattern.compile("(<.*?>)");

    Matcher keyLineMatcher = keyLineContents.matcher(documentURL);

    boolean result = keyLineMatcher.find();

    boolean matchFound = keyLineMatcher.matches();
Run Code Online (Sandbox Code Playgroud)

做这样的事情引发了一个例外:

     String abc = keyLineMatcher.group(0);
Run Code Online (Sandbox Code Playgroud)

谢谢.

cle*_*tus 7

循环匹配的正确方法是:

Pattern p = Pattern.compile("<.*?>");
Matcher m = p.matcher(htmlString);
while (m.find()) {
  System.out.println(m.group());
}
Run Code Online (Sandbox Code Playgroud)

话虽这么说,正则表达式是一种解析HTML的极差方法.原因归结为:正则表达式适用于解析常规语言.HTML是一种无上下文的语言.正则表达式落后的地方是嵌套标签,使用>内部属性值等等.

使用专用的HTML解析器,例如HTML Parser.

  • "我稍后会使用html解析器".这就是他们所说的...... :-) (5认同)