2013-04-07 151 views
0

想象我有字符串製作+非貪婪?

abcD 

,我想提取abc出來。我想用

^(.+)D$ 

的卻然後匹配1組,不僅abc,但abcD包括 - 如何使.+貪心不足,所以D不包括組?我知道我可以使用[^D]+,但這真的是唯一的方法嗎?

對不起,這是一個不好的測試案例。 看一看這個樣本(JAVA):

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

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

爲什麼這場比賽?字符串中的正則表達式不應只允許一個{和一個}?我只想要像{< not } >}這樣的東西匹配。

+0

的這個演示你的意思'^(。+)d $'?你正在使用哪種正則表達式? – 2013-04-07 18:37:48

+0

這不是貪婪的'.',而是'+'。 – 2013-04-07 18:38:12

+0

@凱特湯普森:當然,謝謝! Nathan,好的,謝謝,但是,有關如何改變這種行爲的想法? – 2013-04-07 18:39:33

回答

2

爲了使量詞貪心不足,在添加?量詞後:

^(.+?)D$ 

這取決於,不過,您的語言或文本編輯器。不同的正則表達式引擎支持不同的功能。

+0

謝謝,不幸的是我的示例很糟糕,現在上面提供了一個完整的示例,我覺得'。+?'是貪婪的,儘管它不應該 - 我知道我做錯了什麼?謝謝! – 2013-04-07 19:12:51

0

「D」不包含在第一組中,它包含在完整模式匹配中。

第一組是「abc」。

你可以看到在http://rubular.com/r/oSnF17Jd39

+0

你是對的,這是我的錯,也是一個錯誤的樣本 - 增加了一個新的;-) – 2013-04-07 19:13:10