我正在尝试在单个正则表达式中获取HTML源代码元标记“name”属性值。这可能吗? 现在我正在运行一个正则表达式来获取所有元标记:
"<meta.*?>"
我将所有匹配存储到List&lt; String&gt;中,然后在这些结果上运行第二个正则表达式以获取“name”属性值:
"name=\".*?\""
有没有办法用一个正则表达式做到这一点?我只想存储元标记的“名称”属性,忽略其他HTML标记。
谢谢!
答案 0 :(得分:1)
List<String> matchList = new ArrayList<String>();
try {
Pattern regex = Pattern.compile("(?<=<meta).*?name\\s*=\\s*\"(.*)\"");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group(1));
}
} catch (PatternSyntaxException ex) {
// Syntax error in the regular expression
}
您的列表(matchList)最后应包含所需的结果,该结果将是所有名称属性的值。
最后,正如您将在与xml / html和regex相关的所有帖子中看到的那样,规范是使用解析器而不是正则表达式。但是,如果您的任务非常简单,您可以轻松地使用正则表达式。
答案 1 :(得分:1)
Jsoup(和其他HTML解析器)可以干净利落地完成这项工作:
public static List<String> parseForMeta(String htmlText) {
Document jsDocument = Jsoup.parse(htmlText);
Elements metaElements = jsDocument.select("meta[name]");
List<String> metaList = new ArrayList<String>();
for (Element element : metaElements) {
metaList.add(element.toString());
}
return metaList;
}
编辑:但是,哎呀,你已经从上一个帖子中知道了这个!?