匹配不以 abc 开头的单词

目标

匹配不以 abc 开头的单词

分析

从单词的开始位置开始匹配,可以用 \b 匹配单词的开始位置。

    \b

"不以 abc 开头",也就是说:"单词的开始位置的右边不是 abc"
匹配这种"在某个位置的左边/或右边不是xxx"的需求,需要用到正则表达式中的
环视功能,在这里先简单介绍一下正则表达式中环视(lookaround)的概念

环视

环视结构不匹配任何字符,只匹配文本中的特定位置
这一点与单词分界符 \b 、锚点 ^$ 相似。

四种类型的环视

类型 正则表达式 匹配成功的条件...
肯定逆序环视
否定逆序环视   
(?<=......)
(?<!......)
子表达式能够匹配左侧文本
子表达式不能匹配左侧文本
肯定顺序环视
否定顺序环视
(?=......)
(?!......)
子表达式能够匹配右侧文本
子表达式不能匹配右侧文本

由上可知,"右边不是 abc" 可以使用否定顺序环视

    (?!abc)

可以用 \w 匹配单个单词字符

最终的正则表达式

    \b(?!abc)\w+

不使用 \b :

    (?<!\w)(?=\w)(?!abc)\w+

留个问题:如何匹配不包含 abc 的单词。

以上,请大家多多指教。

posted @ 2011-06-07 17:09  mozillazg  阅读(810)  评论(0编辑  收藏  举报