有人能解释我有什么区别[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