2013-04-28 62 views
2

到目前爲止,我還沒有在正則表達式中使用不情願的量詞,並且我看了一下該網站的一些問題以理解它的功能和用法。雖然similar question是相當具有描述性的,但我仍不明白它如何與java tutorial中的示例相關聯。我明白,不情願的量詞匹配儘可能少的情況。那麼,它是如何解釋,一個正則表達式在正則表達式中使用不情願的量詞

".*?foo" 

上的繩子

"xfooxxxxxxfoo" 

回報兩場比賽:"xfoo""xxxxxxfoo"

而且,由於佔有慾量詞的解釋也不夠,可能有人解釋爲什麼在同一個String正則表達式

".*+foo" 

不匹配什麼?

+1

有一個非常全面的解釋[在本教程](http://www.regular-expressions.info/repeat.html)。 [這裏是關於佔有量詞的部分](http://www.regular-expressions.info/possessive.html)。我不記得這兩頁的前幾章要求你讀過多少,但值得一試。如果你被困在一些解釋中,我實際上建議你閱讀整個教程。這一切都很清楚,並在我看來很好解釋。 – 2013-04-28 15:53:03

回答

3

「貪婪,不情願和擁有量詞之間的差異」一節中教程頁面上的描述對我來說似乎很清楚。你不瞭解什麼部分?

爲了回答您的具體問題:

  • 有關模式".*?foo",不情願的量詞(.*?)第一抓起什麼;該模式的其餘部分(foo)無法匹配。匹配支持一個字符的不情願量詞(x);然後模式的其餘部分匹配。然後整個模式再次開始(在第一個"foo"之後)並且不匹配,直到它抓住第二個foo之前的所有x字符,此時它具有第二個匹配。

  • 有關模式,(".*+foo"),佔有慾量詞(.*+)抓住所有可能的輸入(因爲"."匹配任何東西),有沒有什麼遺留下來的格局"foo"部分匹配。因爲".*+"是佔有慾,它不會給任何回報;因此,與貪婪量詞不同,當匹配返回所有格量詞時,它就會失敗。