плохие-хорошие слова с регулярным выражением

У меня есть список:

$bad_words = ['aaa', 'bbb', 'ccc']
$good_words= ['__aaa', 'bbb==', '#ccc==']

По этим спискам я бы сгенерировал эти правила:

$rules = ['/((?<!__)aaa)/', '/(bbb(?!==))/', '/((?<!#)ccc(?!==))/']

Проблема: неверное ccc-правило (https://regex101.com/r/cC3hY7/1): он должен найти такие строки, как #ccc, #ccc-- или же ccc== и исключить только такие строки, как #ccc==

Как это исправить?

0

Решение

Вы могли бы просто использовать (*SKIP)(*F) как ниже.

    (?:#ccc==|bbb==|__aaa)(*SKIP)(*F)|(?:aaa|bbb|ccc)
#   |<- Strings you don't want ----->|<--strings you want-->

DEMO

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector