【问题标题】:Match regular expression not containing bad words匹配不包含坏词的正则表达式
【发布时间】:2019-05-23 20:57:51
【问题描述】:

当主题不包含坏词时如何使preg_match通过?这是相反的:

$pattern = '/\b(some|bad|words)\b/i';

function matches($pattern, $value) {
    echo "matches $pattern: $value, matches: " . preg_match($pattern, $value)."\n";
}

matches($pattern, "This should match");
matches($pattern, "This bad string should not match");

到目前为止,我发现的所有示例都相反:当主题包含坏词时它们匹配。

我希望它在不包含坏词时匹配。

尝试了几种组合和搜索,但找不到解决方案。使用 '?!' '\b' 似乎是不可能的?

【问题讨论】:

  • if(!preg_match(.....)) - 简单。
  • 我们有一个用 PHP 编写的 4GL 工具,它允许指定一个“validationPattern”属性,我们不能在其中反转结果。无论如何感谢您的建议。
  • 使用匹配函数的唯一原因是实际匹配某些东西。如果你不想匹配一些词,那么你想匹配什么词?

标签: php regex pcre


【解决方案1】:

你可以用这个

^((?!some|bad|words).)*$

Demo

【讨论】:

  • 感谢您的反应。这实际上也匹配部分单词,例如 someday 或 badly。这种模式是解决方案(基于“标记为重复”问题的答案):/^(?:(?!\b(some|bad|words)\b).)*$/i
  • @KeesvanDieren 您的正则表达式将匹配 o'some; 使用 space 而不是 \b
【解决方案2】:
^((?!\b(some|bad|words)\b).)*$

【讨论】:

    猜你喜欢
    • 2016-01-14
    • 2017-02-06
    • 1970-01-01
    • 2022-12-11
    相关资源
    最近更新 更多