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

时间:2016-12-05 18:15:18

标签: php regex pcre

给出一系列字符串:

  • error.user
  • 成功
  • success.user
  • success.admin

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

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

第一部分:((?!error)\w*)工作正常,并将匹配范围缩小到仅以success开头的字符串。由于某种原因,第二部分:((?!\.*user)\w*)正在做什么。我认为第一部分匹配太多了。

我在PHP / PCRE中这样做 这是我的regex101.com链接:https://regex101.com/r/l2sZru/1

1 个答案:

答案 0 :(得分:2)

你需要修复你的负面正则表达式:

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

RegEx Demo

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

你的正则表达式中的

(?!\.*user)表示当输入有0个或更多DOT,然后在开始时只有user时断言失败。