Подисок регулярных выражений Java в одном процессе? - PullRequest
3 голосов
/ 09 октября 2011

Я пытаюсь получить значение атрибута name метатега исходного кода HTML в одном регулярном выражении. Это возможно? Сейчас я запускаю регулярное выражение, чтобы получить все метатеги:

"<meta.*?>"

Я сохраняю все совпадения в список , а затем запускаю второе регулярное выражение для этих результатов, чтобы получить значение атрибута "name":

"name=\".*?\""

Есть ли способ сделать это с помощью одного регулярного выражения? Я просто хочу сохранить атрибут "name" ТОЛЬКО для метатегов, игнорируя другие HTML-теги.

Спасибо!

Ответы [ 2 ]

1 голос
/ 09 октября 2011

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

РЕДАКТИРОВАТЬ: Но, черт возьми, вы уже знаете это из своей последней темы!?

1 голос
/ 09 октября 2011
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 и регулярными выраженияминормой является использование синтаксического анализатора вместо регулярного выражения.Однако, если ваша задача настолько проста, вы можете легко выполнить ее с помощью регулярных выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...