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

时间:2018-05-16 18:18:34

标签: regex regex-negation

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

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

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

2 个答案:

答案 0 :(得分:4)

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

使用否定预测,您可以从匹配项中排除www

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

Live demo

答案 1 :(得分:0)

我认为没有办法在一个正则表达式中实现这一点。我建议您使用白名单和黑名单概念。

正如其他人所提到的,\w相当于[A-Za-z0-9_]。您可能还希望匹配单词边界(\b)而不是行的开头和结尾。

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

伪代码:

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

请注意,如果正则表达式不匹配,它将short circuit,因此它不会检查黑名单是否匹配。如果您希望黑名单比白名单更频繁地匹配,那么您需要交换这两个列表。

编辑:如果您每行匹配一个单词,则负向前瞻功能正常。看起来你在表达中做了什么,所以忽略这一点。