Java正则表达式subsearch在一个进程中?

时间:2011-10-09 02:06:43

标签: java regex

我正在尝试在单个正则表达式中获取HTML源代码元标记“name”属性值。这可能吗? 现在我正在运行一个正则表达式来获取所有元标记:

"<meta.*?>"

我将所有匹配存储到List&lt; String&gt;中,然后在这些结果上运行第二个正则表达式以获取“name”属性值:

"name=\".*?\""

有没有办法用一个正则表达式做到这一点?我只想存储元标记的“名称”属性,忽略其他HTML标记。

谢谢!

2 个答案:

答案 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;
   }

编辑:但是,哎呀,你已经从上一个帖子中知道了这个!?