Back

正则表达式中的贪婪和懒惰 (greedy expression in regexp )

发布时间: 2013-05-29 07:18:00

in short: adding "?" to the regexp

"123 123 123".match(/1.*3/)   # => "123 123 123"
"123 123 123".match(/1.*?3/)   # => "123"

http://rubyer.me/blog/357/

6、贪婪匹配vs懒惰匹配
这两种匹配属于标准正则表达式内容,与Ruby没关,但新手如果不明白匹配时会发生莫名其妙的错误,所以特别总结一下。

贪婪匹配:尽可能多匹配,正则默认是贪婪匹配。例子:a.*b它将会匹配最长的以a开始,以b结束的字符串。对于aabab的匹配结果是aabab。
懒惰匹配:尽可能少匹配。例子:a.*?b对于aabab的匹配结果是aab和ab。
一般是在原来表达式结尾加?就由贪婪匹配变成了懒惰匹配。常用的懒惰限定符有(去年最后的问题就是贪婪匹配):

?重复任意次,但尽可能少重复
+?重复1次或更多次,但尽可能少重复
??重复0次或1次,但尽可能少重复
{n,m}?重复n到m次,但尽可能少重复
{n,}?重复n次以上,但尽可能少重复

Back