我有正则表达式将表情符号更改为图像。这是
(?:(?![0]:\)|:\)\)|:-\)\)))(:\)|:-\))
关键是不要改变0 :)和:))和:-))同时改变:)和:-) 它与:))和:-))相当不错,但不知何故仍然抓住:)在0:)
我的错误在哪里?
答案 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'
:)
:-)