Java Regex html解析器

时间:2012-02-09 05:26:10

标签: java regex

  

可能重复:
  java regex quantifiers

我正在学习一些正则表达式,我遇到了这个问题:

所以我有一个字符串 TAG1 sometext TAG2 some text TAG3 someText

我需要得到的是标记语句之间的子字符串。

之类的东西
Tag1 sometext
Tag2 some text
Tag3 someText

所以我写了这个正则表达式,

Pattern pattern = Pattern.compile("TAG\\d.*TAG\\d");
Matcher matcher = pattern.matcher(string);
while(matcher.find){
    print(matcher.group);
}

但输出是

TAG1 sometext TAG2 some text TAG3 someText

我理解的方式是,点匹配任何东西,星星量化为无或多。因为我相信我的正则表达意思 TAG有一些数字,然后是其他一些东西,然后TAG和一些数字。

我在写这篇文章时也意识到,我不想要所有的子集 TAG#text TAG# 组合。 例如我不想要 TAG#text TAG#text TAG#

有人可以增加我对正则表达式的理解吗?

由于

编辑---

我没有在正则表达式中编写完整的HTML解析器。没有。 这是一个html解析项目,我使用Jsoup作为其中最重要的部分。 这个正则表达式只是获取一些关于html的元数据的黑客,所以我以一种或另一种形式将html传递给jsoup。

2 个答案:

答案 0 :(得分:1)

你的表达中没有组。使用paranthesis将它们分成组。就像“(TAG \ d)(。*)(TAG \ d)”“我是新手的正则表达式,你可能需要玩你的正则表达式,但至少是paranthesis部分是最低限度的。

答案 1 :(得分:1)

默认情况下,正则表达式量词是贪婪的 - 它们将尽可能匹配,因此.*匹配以下所有TAG#序列。解释如何添加适当的修饰符here

您可能还会发现lookahead assertions很有用。

另外,为什么这个标记的HTML?看起来不像你正在解析的那样。