制作+非贪心?

时间:2013-04-07 18:33:56

标签: java regex regex-greedy

想象一下,我有字符串

abcD

我希望从中提取abc。我想过用

^(.+)D$

然而,在匹配group1时,不仅包括abc,还包括abcD - 如何使.+更少贪婪,因此D不包含在群组中?我知道我可以使用[^D]+,但这真的是唯一的方法吗?

对不起,这是一个糟糕的测试用例。 看看这个示例(Java):

Pattern pattern = Pattern.compile("^(\\{(.+?)\\})?$");
Matcher matcher = pattern.matcher("{a}{b}");

System.out.println(matcher.matches()); // true

为什么这匹配?正则表达式不应该只允许字符串中的一个{和一个}吗?我只希望{< not } >}之类的内容匹配。

2 个答案:

答案 0 :(得分:2)

为了使量词不那么贪心,你可以在量词之后添加?

^(.+?)D$

但这取决于您的语言或文本编辑器。不同的正则表达式引擎支持不同的功能。

答案 1 :(得分:0)

“D”不包含在第一组中,它包含在完整模式匹配中。

第一组是“abc”。

您可以在http://rubular.com/r/oSnF17Jd39

看到此演示