【问题标题】:Regex with double negative matches具有双重否定匹配的正则表达式
【发布时间】:2017-04-20 05:27:14
【问题描述】:

给定一系列字符串:

  • error.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

【问题讨论】:

    标签: php regex pcre


    【解决方案1】:

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

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

    RegEx Demo

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

    您的正则表达式中的(?!\.*user) 表示当输入有 0 个或更多点时断言失败,仅在开始时后跟user

    【讨论】:

    • 非常感谢!我会在 7 分钟内接受你的回答。
    • ^(?!error|.*\.user)[\w.]+$比较短
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多