正常表达的坏话

时间:2014-12-05 11:51:46

标签: php regex whitelist blacklist

我有一些清单:

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

通过此列表,我将生成以下规则:

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

问题:ccc规则不正确(https://regex101.com/r/cC3hY7/1):必须找到#ccc#ccc--ccc==等字符串,并且只排除{{1}等字符串1}}

如何解决?

1 个答案:

答案 0 :(得分:1)

您可以像下面一样使用(*SKIP)(*F)

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

DEMO