2010-03-20 16 views
6

Mam regexp, aby zmienić emotikony na obrazy. Tu jestwykluczenie regexp

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

Chodzi nie zmienić i 0 :) :)) i :-)) podczas zmiany :) a :-) To działa całkiem dobrze :)) i :-)) ale jakoś nadal łapie :) w 0 :)

Gdzie jest mój błąd?

Odpowiedz

5

Więc chcesz dopasować :) i :-), ale nie musi być poprzedzone 0 lub po innej )? To jest wzór:

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

Zasadniczo to

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

przykład:

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

ja przykład dodano Perl. – jfs

+0

O tak, musisz być guru regexp. Działa dobrze, dziękuję! – Vlad