有人能解釋我有什麼區別[0-9]+
和[0-9]++
?[0-9] +和[0-9] ++之間的區別是什麼?
回答
的PCRE引擎,它使用PHP的正則表達式,支持"possessive quantifiers":
量詞其次
+
是 「佔有慾」。他們吃盡可能多的人物,並且不會返回以匹配其餘的模式。因此.*abc
匹配"aabc"
,但.*+abc
不會因爲.*+
吃整個字符串。擁有量詞可以用來加速處理。
和:
如果PCRE_UNGREEDY選項設置(此選項是不是在Perl中使用),那麼量詞是不是默認的貪婪,但個別的人可以通過以下他們做出貪婪一個問號。換句話說,它反轉了默認行爲。
的差別是這樣的:
/[0-9]+/ - one or more digits; greediness defined by the PCRE_UNGREEDY option
/[0-9]+?/ - one or more digits, but as few as possible (non-greedy)
/[0-9]++/ - one or more digits, but as many as possible (greedy, default)
This snippet形象化的差在貪婪逐默認模式時。請注意,第一個代碼段在功能上與上一個代碼段相同,因爲附加的+
(從某種意義上)是默認情況下已應用的。
This snippet在應用PCRE_UNGREEDY(默認爲默認模式)時可視化差異。看看默認值是如何顛倒的。
++
(和?+
,*+
和{n,m}+
)被稱爲possessive quantifiers。
[0-9]+
和[0-9]++
都匹配一個或多個ASCII數字,但第二個將不允許正則表達式引擎回溯到匹配,如果整個正則表達式成功需要這樣做。
實施例:
[0-9]+0
字符串00
相匹配,而[0-9]++0
沒有。
在第一種情況下,[0-9]+
首先匹配00
,但後退一個字符以允許匹配以下0
。在第二種情況下,++
阻止了這一點,因此整個比賽失敗。
並非所有的正則表達式都支持這種語法;其他一些實施atomic groups(或甚至兩個)。
謝謝你的回答! – user557108 2011-05-31 11:18:31
- 1. XML XSLT%0A%09%09?固定?
- 2. 如何使用php重新排列日期(09-09-2013)到(2013-09-09)?
- 3. $(())和expr之間的區別是什麼?
- 4. $和$ .fn之間的區別是什麼?
- 5. ++和:haskell之間的區別是什麼?
- 6. $(「」)和$ .find(「」)之間的區別是什麼?
- 7. 「\」和「\。」之間的區別是什麼?
- 8. 「$ | ++」和「$ | = 1」之間的區別是什麼
- 9. $(...)和`...`之間的區別是什麼
- 10. .equals()和==之間的區別是什麼?
- 11. [undefined]和[,]之間的區別是什麼?
- 12. 區別:%% a和%variable%變量之間的區別是什麼?
- 13. 什麼是爲PrintWriter和DataOutputStream之間的區別是什麼?
- 14. 這是什麼Vim序列09.在做什麼?
- 15. dataGridView顯示2016-09-01而不是2016-09-01 00:00
- 16. [EmailPasswordAuthProvider,EmailAuthProvider]之間的區別是什麼
- 17. MVC和MVVM之間的區別和相似之處是什麼?
- 18. TVF/UDF之間的區別是什麼
- 19. System.Linq.Enumerable.WhereListIterator&System.Linq.Enumerable.WhereSelectListIterator之間的區別是什麼?
- 20. 什麼之間的區別〜^和Git中
- 21. 什麼@android之間的區別:和android:
- 22. 什麼是SetupAPI,SetupAPI1和SetupAPI2?他們之間有什麼區別?
- 23. lock_guard之後lock()和guard()之間的區別是什麼
- 24. 「層」和「層」之間有什麼區別?
- 25. Tableau和QlikView之間有什麼區別
- 26. Microsoft.CompilerServices.AsyncTargetingPack和Microsoft.Bcl.Async之間有什麼區別?
- 27. @Entity和@embeddable之間有什麼區別
- 28. ContentObservable和DataSetObservable之間有什麼區別?
- 29. touchmove和gesturechange之間有什麼區別?
- 30. :notification.flags和notification.defaults之間有什麼區別?
這不是一個重複的東西,但應該回答這個問題:http://stackoverflow.com/questions/4489551/what-is-double-plus-in-regular-expressions – Spudley 2011-05-31 11:06:26
我從來沒有聽說過' ++'在正則表達式中,似乎很多其他人也沒有,但有點挖掘確實表明它是有效的。 – Spudley 2011-05-31 11:10:53
對不起,我沒有找到。 – user557108 2011-05-31 11:11:04