regexp排除

时间:2010-03-20 12:06:15

标签: regex exception

我有正则表达式将表情符号更改为图像。这是

(?:(?![0]:\)|:\)\)|:-\)\)))(:\)|:-\))

关键是不要改变0 :)和:))和:-))同时改变:)和:-) 它与:))和:-))相当不错,但不知何故仍然抓住:)在0:)

我的错误在哪里?

1 个答案:

答案 0 :(得分:5)

您希望匹配:):-),但不能在0之后或其他)之后?那就是模式:

(?<!0):-?\)(?!\))

基本上是

(?<!0) : negative lookbehind; must not be preceded by 0
:-?\)  : smiley with optional nose
(?!\)) : negative lookforward; must not be followed by )

示例:

$ echo ':) :-) ok 0:) :)) :-)) 0:-)) 0:-) : )' | \
> perl -lne'print $1 while /(?<!0)(:-?\))(?!\))/g'
:)
:-)