可能重复:
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。
答案 0 :(得分:1)
你的表达中没有组。使用paranthesis将它们分成组。就像“(TAG \ d)(。*)(TAG \ d)”“我是新手的正则表达式,你可能需要玩你的正则表达式,但至少是paranthesis部分是最低限度的。
答案 1 :(得分:1)
默认情况下,正则表达式量词是贪婪的 - 它们将尽可能匹配,因此.*
匹配以下所有TAG#序列。解释如何添加适当的修饰符here。
您可能还会发现lookahead assertions很有用。
另外,为什么这个标记的HTML?看起来不像你正在解析的那样。