具有双重否定匹配的正则表达式

Regex with double negative matches

给定一系列字符串:

我想编写一个正则表达式来匹配任何不以 error 开头的内容,并且其中也没有 .user。所以对于这个列表,successsuccess.admin

到目前为止我得到的是:/^((?!error)\w*)((?!\.*user)\w*)/

第一部分:((?!error)\w*) 工作正常,并将匹配范围缩小到仅以 success 开头的字符串。出于某种原因,第二部分:((?!\.*user)\w*) 完全没有做任何事情。我觉得第一部分太匹配了。

我正在 PHP/PCRE
这是我的 regex101.com link:https://regex101.com/r/l2sZru/1

您需要像这样修复负正则表达式:

^(?!error|.*\.user)[\w.]+$

RegEx Demo

这里 (?!error|.*\.user) 如果 error 在开头或者如果在输入的任何地方找到 .user` 将断言失败。

正则表达式中的

(?!\.*user) 表示当输入有 0 个或多个点时仅在开始时后跟 user 时断言失败。