谋定而后动

Just Do It

正则表达式如何避免贪婪匹配

本来是因为兴趣而研究 http://www.douban.com/group/topic/21206826/

看到里面一个正则表达式,这个另我费解,自己也试了一下,发现我以前对 .* 的匹配理解有误。

先说明一下 .*? 的作用。本来我也稀里糊涂,看过http://lordong.net/wp/post/1127.html 才有所了解。

既然那篇文章说的很清楚,我就不抄袭他的例子了,而且我自己也给不出一个更好的。

说说我对 .*? 里面 .* 的理解吧。

. 是表示任意字符的,那么 .* 就是任意字符任意多个。

以前我错误的理解了 . 的含义,我觉得a.*b可以匹配 ab也可以匹配acccccccccccccb,这是我的理解,只能匹配一个字符0次或者任意次,当我发现还可以匹配 acdeerwb的时候我就没弄清楚到底是怎么匹配的。这种稀里糊涂的精神最要不得。

现在通过.*.*?可以明白了,.是匹配任意字符没错,但是却不是一个固定不变的字符,*表示前面的元素是0个或者任意多个,那么 .*?就表示?前面的那个任意字符,只能出现一次或者0次,出现多次就不匹配,这就恰好是我们需要的避免贪婪匹配。

Comments