4
A
回答
5
這是一個非貪婪匹配。在[AB]*?
中,正則表達式只尋找[AB]
,以使整個正則表達式匹配搜索的字符串,而貪婪版本[AB]*
尋找儘可能多的出現次數。這是Perl的regexes的一個特性,因此可以在PCRE(Perl Compatible Regular Expressions)(參見repetition)和其他系統中找到Perl的定義。
的PCRE頁面給出了一個例子:
的其中[貪婪]給出問題的經典例子是嘗試匹配C語言的註釋。這些出現在
/*
和*/
之間,並且在評論中可能出現個別的*
和/
個字符。試圖通過應用模式來匹配C註釋:/\*.*\*/
字符串
/* first comment */ not comment /* second comment */
失敗,因爲它由於
.*
項目的貪吃整個字符串匹配。如果一個量詞後跟一個問號,它就不再是貪婪,而是次可能的最小數量相匹配,因此模式
/\*.*?\*/
做正確的事與C註釋。
2
Jonathan已經解釋了區別,但這裏有一個例子可以幫助你理解這裏發生了什麼。
鑑於字符串 「9AB」:
([0-9][AB]*?)
比賽唯一的 「9A」,因爲它很快將停止爲 「A」 匹配(懶惰)([0-9][AB]*)
整個字符串匹配(「9AB 「),因爲它消耗‘A’和成功匹配以下‘B’(貪婪)
注意,第二個將匹配位數,隨後零個或多個(無限制)數量的「A」或「B」。
相關問題
- 1. 正則表達式量詞
- 2. 否定詞組? - 正則表達式(正則表達式)
- 3. 正則表達式組合
- 4. 正則表達式量詞的java
- 5. java的正則表達式量詞
- 6. Javascript正則表達式「無效量詞」
- 7. 正則表達式懶惰量詞
- 8. Javascript正則表達式量詞
- 9. 正則表達式嵌套量詞+
- 10. C++正則表達式匹配「+」量詞
- 11. 正則表達式嵌套量詞*
- 12. 正則表達式量詞OR
- 13. 正則表達式與?和{}量詞
- 14. 正則表達式:使用量詞
- 15. 爪哇正則表達式possesive量詞
- 16. 正則表達式量詞錯誤
- 17. 正則表達式 - 匹配一組詞
- 18. 分詞正則表達式
- 19. 兩個正則表達式的組合
- 20. 正則表達式中的「+」與「$」組合
- 21. 傳遞變量的JavaScript正則表達式:變量和正則表達式模式的組合
- 22. 使用量詞的多個正則表達式捕獲組
- 23. 帶捕獲組問題的正則表達式量詞
- 24. 正則表達式,貪婪的量詞多個捕獲組
- 25. 正則表達式根據單詞組合篩選行
- 26. 正則表達式的所有合法正則表達式的
- 27. 正則表達式與各種組合
- 28. 正則表達式 - 組合兩個類
- 29. 合併三個正則表達式組
- 30. data.table setnames與正則表達式組合
謝謝你的例子,Maroun。我在Python中試過這個例子,而不是得到你的建議,我得到了「9」的結果。這是我的代碼: x = re.search(r'[0-9] [AB] *?','9AB') print x.group(0) – akaii
哪一個是正確的結果,「9 「或」9A「? – akaii
9是正確的,因爲允許'[AB]'的零匹配。當貪婪的量詞後面有些東西時,貪婪主要是重要的。 –