您的位置:首页 > 编程语言 > PHP开发

正则入门:两个匹配模式

2011-02-03 00:00 776 查看
现在请回顾一下上面贪婪、惰性匹配语法的表,有两个匹配模式比较有意思:

一个是“{n}”,对于这种形式的匹配,由于它精确地要求匹配 n 个字符,所以无所谓贪婪还是惰性,尽管“{n}?”也是正确的匹配写法,但它的匹配结果总是与“{n}”相同。

还有一个就是“??”,它看上去比较古怪且不好理解,因为通常我们使用贪婪匹配的时候都是匹配多个,也就是“*”或者“+”之类的匹配,而这里是 0 个或 1 个,它的贪婪与惰性匹配又是如何呢?我们还是看范例来说明:

正则如下:

nowamagic?

效果演示

welcome to nowamagic

本例代码

function reg_replace()
{
var test = document.getElementById("test");
aim = "nowamagic?";
var regex = new RegExp("("+aim+")","g");
test.innerHTML = test.innerHTML.replace(regex,"<span style='background-color:orange'>$1</span>");
}

我们来分析一下,在这个匹配中,匹配是这样的:首先需要匹配“nowamagic”字符串,然后,可以有 0 个或者 1 个“s”,按上面讲述的,贪婪匹配匹配尽可能多的,所以 nowamagic 被匹配了。

再来看看“??”这种匹配。

正则如下:

nowamagic??

效果演示

welcome to nowamagic

这次只匹配了“nowamagi”,我想现在已经不用过多解释,你对这个怪异的匹配语法已经明白了。惰性匹配发现“nowamagi”满足匹配 0 个的条件,于是将它保存到匹配结果集,然后重新进行匹配查找,直到字符串结束。

延伸阅读

此文章所在专题列表如下:

什么是正则表达式?

正则入门:匹配固定的单个字符

正则入门:匹配任意的单个字符

正则入门:字符组的使用

正则入门:在字符组中使用字符区间

正则入门:反义字符组的使用

正则入门:匹配空字符

正则入门:匹配一个或多个字符

正则入门:匹配零个或多个字符

正则入门:匹配零个或一个字符串

正则入门:匹配固定数目的字符

正则入门:匹配区间内数目的字符

正则入门:贪婪匹配

正则入门:惰性匹配

正则入门:两个匹配模式

正则入门:匹配单词边界

正则入门:边界的定义与相对性

正则入门:匹配非单词边界

正则入门:匹配文本首和尾

正则入门:子模式

正则入门:“或”匹配

正则入门:后向引用文本替换

正则入门:非获取匹配

正则总结:JavaScript中的正则表达式

正则总结:正则表达式在js中的高级应用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: