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

标签 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();

做这样的事情会抛出异常:

     String abc = keyLineMatcher.group(0);

谢谢。

最佳答案

循环匹配的正确方法是:

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

也就是说,正则表达式是一种极差的 HTML 解析方法。原因归结为:正则表达式可以很好地解析 regular languages。 . HTML 是 context free language .正则表达式适用于嵌套标签、在属性值中使用 > 等。

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

关于java - 关于使用 Regex 和 Java 解析 HTML 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2394457/

相关文章:

java - 调整表示为邻接矩阵的图的大小

java - 需要迭代具有同名子节点的 xml

php - preg_match 检查字符串是否包含在双引号或单引号中

python - Python 中的正则表达式用于匹配可能包含或不包含某些部分的模式

java - 获取请求 xml 的 Groovy 脚本

java - 从 ArrayList 中减去逗号和括号

python - 为自定义格式实现解析树的 pythonic 方法是什么?

java - mozilla rhino 从 javascript 覆盖一个对象方法

java - 在 Android 中获取 "SQLiteException: no such column"

jquery - 正则表达式要求至少一位数字或留空