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)
谢谢.
循环匹配的正确方法是:
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.