2011-06-26 18 views
1

我知道一個具有正則表達式的正則表達式會到文本的末尾,並且不會回溯到結束之前是否有匹配。如果最後有一個匹配,則返回true,否則它會立即返回false。我已經tride這樣的:瞭解所有格量詞,java正則表達式

Pattern patt = Pattern.compile(".*+foo"); 
Matcher matcher = patt.matcher("xxfooxxxxxfooxxxfoo"); 
while (matcher.find()) 
    System.out.println(matcher.group()); 

它給我什麼,即使有在最後一場比賽。任何想法爲什麼?

另外我明白,要在第一個量詞(即*?或* +)之後添加?/ +,使正則表達式懶/佔有慾。是對的嗎?謝謝!

回答

3

即使最後有匹配,它也不會給我什麼。任何想法爲什麼?

.*+將匹配整個輸入字符串(包括最後的foo)。並且因爲它不會從字符串的末尾回溯,所以正則表達式.*+foo不匹配。

另外我明白,要使正則表達式懶/佔有慾,我在第一個量詞(即*?或* +)之後加上?/ +。是對的嗎?佔有慾

計數器部分懶惰。這將是貪婪的,默認是*

所以,正則表達式.*?foo將匹配"xxfoo"和正則表達式.*foo將匹配"xxfooxxxxxfooxxxfoo"

1

擁有量詞不會放棄回溯匹配。 .*+匹配您的整個字符串,然後foo沒有任何匹配。

呃像巴特說的那樣。 :)

使用佔有的量詞只有當你知道你已經匹配不應該被回溯(例如,[^f]*+.*foo或者,如果你知道,唯一的「F」字將在「富」的開始,[^f]*+foo)。

+1

那麼,你可以舉一個匹配整個字符串的正規表達式的例子嗎?謝謝 – yotamoo

+0

你想匹配每個「富」或只是最後一個? –

+0

我可以將它與所有的正則表達式匹配嗎? – yotamoo