2013-01-15 71 views
5

如何以下量詞不同 - 相對於情景,速度等懶惰,貪婪和佔有量詞有什麼區別?

  • ????+所有匹配0或1次
  • *,*? and * +`全部匹配0次或更多次
  • ++?++所有匹配1次或更多次

  • ?*+貪婪
  • ??,*?+?勉強/懶惰
  • ?+*+++佔有慾

任何人都可以幫助我理解這些術語的含義嗎?爲什麼每個量詞在同一個工作中有三個變體?

+2

爲什麼?因爲有人在某個地方使用它們?您真的需要花時間閱讀正則表達式文檔,並嘗試使用IRB或rubular.com,查看它們的工作方式,並記住您將來學到的東西。很多學習編程的實驗都是爲了觀察小變化的影響,而不是要求人們解釋這些事情。 –

+0

http://www.regular-expressions.info/possessive.html – Phrogz

+0

@TimPietzcker感謝你投我一票。這對我來說並不重要,但是投票會導致鎖定「新帖子」 - 這是致命的,我認爲。我與這樣的選票最少有交集,但是你太喜歡那些有這樣一個敏銳概念的人,有這樣的概念。但是,一些「SO」用戶在幾天後我看到更多的人對「反對」投票感興趣,而不知道問題的重要性。如果你不明白我的'Post',那就好了。但是當答案已經發布並且答案太多的時候,爲什麼不回來投票誰投票。 – DoLoveSky

回答

7

採取串

aaaab 

,並請參閱下面的正則表達式如何匹配它:

Regex   Submatches 
       group 1 group 2 group3 
(a?)(a*)(ab) a  aa  ab 
(a??)(a*)(ab)   aaa  ab 
(a?+)(a*)(ab) a  aa  ab 
(a*)(a?)(ab) aaa    ab 
(a*?)(a?)(ab)   aaa  ab 
(a*+)(a?)(ab) aaaa    <Match fails!> 
(a+)(a*)(ab) aaa    ab 
(a+?)(a*)(ab) a  aa  ab 
(a++)(a*)(ab) aaaa    <Match fails!> 

說明:

  • a?嘗試匹配一個a,但它的準備如果這是必要的,則不匹配整場比賽取得成功。
  • a??試圖找不到任何東西,但它準備匹配一個a,如果這對整個比賽成功是必要的。
  • a?+試圖匹配一個a。如果可以的話,那麼而不是可以退回來,如果這對於整體比賽的成功是必要的。如果它不能匹配a,那麼它很樂意與任何東西都不匹配。
  • a*試圖儘可能多地匹配a s,但它準備匹配較少的a s,即使沒有,如果這對於整個比賽成功是必要的。
  • 試圖找不到任何東西,但它已準備好匹配儘可能多的a s,以便整個比賽成功,但不是更多。
  • a*+儘可能地匹配儘可能多的a s。如果能夠做到這一點,那麼它將而不是回落,以匹配較少的a s,如果這對整體比賽是成功的必要條件。如果它甚至不能匹配一個單獨的a,那麼它將很樂意與任何東西匹配。
  • a+儘可能匹配儘可能多的a s,但是如果整個比賽成功,則準備匹配較少的a s(但至少一個)。
  • a+?試圖匹配只有一個a,但它準備匹配儘可能多的a s爲了整個比賽成功,但不是更多。
  • a++儘可能匹配儘可能多的a s。如果能夠做到這一點,那麼它將而不是回落,以匹配較少的a s,如果這對整體比賽是成功的必要條件。如果它甚至不能匹配一個a,那麼正則表達式失敗。
+0

最後是一個超越常規「一個或多個等」,「貪婪/不貪婪」的綜合解釋。 Prima! – BernardK

+0

@tim非常好!你給了什麼解釋纔是璀璨!愛它喜歡它! :)'+ 1'給你! – DoLoveSky

+0

@DoLoveSky,請不要投票贊成。請參閱http://stackoverflow.com/faq#reputation瞭解如何在不乞求的情況下獲得聲望的解釋。 –

相關問題