【问题标题】:bad-good words with regular expression带有正则表达式的坏词
【发布时间】:2015-02-03 14:09:10
【问题描述】:

我有一些清单:

$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== 这样的字符串

如何解决?

【问题讨论】:

  • 这是用作审查过滤器吗?
  • 你之前读过this question吗?
  • 同意杰克。但这就是你想要的吗? ((?
  • @trainoasis 谢谢!但我认为以下解决方案更好:更容易生成

标签: php regex whitelist blacklist


【解决方案1】:

您可以像下面这样简单地使用(*SKIP)(*F)。

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

DEMO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2017-07-05
    • 1970-01-01
    相关资源
    最近更新 更多