Никогда, никогда, никогда не используйте регулярные выражения для задачи "сопоставить каждый X, который не соответствует Y". Вместо этого используйте тривиальное регулярное выражение для X и отрицайте результат.
(В выражениях оболочки замените ==
на !=
или используйте grep -v
. В Perl используйте !~
вместо =~
. В JQuery используйте оператор :not
и т. Д. Если ваш API не позволяет вам делать что-либо еще, кроме указания одного регулярного выражения, побеждая поставщика по голове с помощью иерархии формальных языков .)
Хомского
Дополняемые регулярные выражения всегда либо неэффективны, не читаемы или специфичны для движка - обычно это все из вышеперечисленного. Просто скажите "нет" злоупотреблению регулярными выражениями, используйте инструменты для задач, в которых они хороши!