исключение регулярного выражения - PullRequest
6 голосов
/ 20 марта 2010

У меня есть регулярное выражение для изменения смайликов на изображения. Вот оно

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

Смысл не в том, чтобы изменить 0 :) и :)) и :-)) при изменении :) и :-) Это работает довольно хорошо с :)) и :-)), но как-то все еще хватает :) в 0:)

Где моя ошибка?

1 Ответ

5 голосов
/ 20 марта 2010

То есть вы хотите сопоставить :) и :-), но перед ними не должно стоять 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'
:)
:-)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...