4
A
回答
7
.*
很貪心,.*?
不是。它只在上下文中有意義。鑑於模式:
<br/>(.*?)<br/>
和<br/>(.*)<br/>
,輸入<br/>test<br/>test2<br/>
,
.*
將匹配<br/>test<br/>test2<br/>
,
.*?
將只匹配<br/>test<br/>
。
注意:永遠不要使用正則表達式來解析複雜的html。
8
在最正宗的正則表達式中,*?
的產生是非貪婪的重複。這意味着.*?
產品首先匹配空字符串,然後如果失敗,則返回一個字符,直到匹配成功。相反,貪婪的生產.*
首先嚐試匹配整個輸入,然後如果失敗,則嘗試減少一個字符。
該概念僅適用於使用遞歸回溯來匹配模糊表達式的正則表達式引擎。從理論上說,它們的配搭完全相同,但是由於它們先嚐試了不同的東西,它可能會比另一個更快。
當捕獲組(使用遞歸和NFA樣式引擎平等)用於從匹配操作中提取信息時,這也會很有用。例如,像
"(.*?)"
可用於捕獲帶引號的字符串。由於子組非貪婪,因此可以確保不會引用任何引號,並且子組僅包含所需的內容。
相關問題
- 1. Java正則表達式組與。* vs正常正則表達式
- 2. String.startwith Vs正則表達式
- 3. PHP正則表達式@ VS/
- 4. Fparsec vs正則表達式
- 5. Java正則表達式「[。]」vs「。」
- 6. 正則表達式vs String.Contains
- 7. (?=正則表達式)VS(?:正則表達式)
- 8. Python正則表達式vs PHP正則表達式
- 9. htaccess正則表達式vs php正則表達式
- 10. 正則表達式模式:split()vs find()
- 11. 正則表達式(正則表達式)
- 12. 正則表達式(正則表達式)
- 13. 正則表達式(正則表達式)
- 14. 正則表達式IsOne vs包含
- 15. Perl正則表達式vs解析
- 16. VS 2010中的正則表達式
- 17. 正則表達式:boost :: xpressive vs boost :: regex
- 18. 正則表達式在C++ 11 vs PHP
- 19. Python:正則表達式vs find(),strip()
- 20. 正則表達式 - Ruby vs Perl
- 21. Python的正則表達式VS Regex101
- 22. PHP VS JavaScript的正則表達式
- 23. Python vs PHP正則表達式
- 24. 正則表達式(\ S +?)vs(\ S +))
- 25. 正則表達式vs子串
- 26. 正則表達式VS while循環
- 27. Java vs Javascript正則表達式問題
- 28. 正則表達式強制VS可選
- 29. Spry框架VS正則表達式
- 30. HTML敏捷包vs正則表達式
他們的行爲不同。 – BoltClock 2011-02-06 23:22:46
這是誰說的:「在編程中,有時你會遇到問題,然後用正則表達式來解決這個問題,現在你有兩個問題。」? – makdad 2011-02-06 23:27:06
@phooze:每個人。 – 2011-02-07 03:37:31