正则表达式 - 接受字母、数字、下划线,但不接受特定字符串

Regex - accept letter, digit, underscore, but don't accept speific string

我正在尝试制作一个应该接受字母、数字、下划线但不应接受不敏感输入的正则表达式 www

这意味着输入可以是 wwwblablablablawww 或任何包含 www 的单词,但它不能只是 www。有没有可能制作这样的正则表达式?

我有数字、字母、下划线的表达式,但我不知道如何连接www条件:/(^[a-zA-Z0-9_+]$/

要量化一个字符 class 你把量词放在它外面,如果你想捕捉一些东西,你应该关闭左括号。

通过否定前瞻,您可以从匹配项中排除 www

^(?!www$)\w+$
  • \w => [a-zA-Z0-9_]

Live demo

我不认为有一种方法可以在一个正则表达式中实现这一点。相反,我建议您使用白名单和黑名单概念。

正如其他人提到的,\w 等同于 [A-Za-z0-9_]。您可能还想匹配单词边界 (\b) 而不是行首和行尾。

whitelist/blacklist 可以是单个字符串或正则表达式,具体取决于您的要求。

伪代码:

if regex(string, pattern = whitelist) and string != blacklist

注意,如果正则表达式不匹配,它会short circuit,所以它不会检查黑名单是否匹配。如果您希望黑名单比白名单更频繁地匹配,则需要交换两者。

编辑: 如果您每行匹配一个单词,则否定前瞻有效。看样子你的表情是这样的,无视这个。