【问题标题】:Negate match in RE2 syntax?RE2语法中的否定匹配?
【发布时间】:2015-03-27 15:34:40
【问题描述】:

如何在 RE2 中为“不以 4 或 5 开头的匹配字符串”编写正则表达式?

在 PCRE 中我会使用 ^(?!4) 但 RE2 doesn't support that syntax

【问题讨论】:

  • 你可以使用^[^45],但它会消耗一个字符。

标签: regex re2


【解决方案1】:

我也遇到了这个问题,但我正在寻找字符串,而不是单个字符。

我的做法是多看两眼。

首先,找到所有匹配的项目,然后过滤得到最终答案

示例

  • 测试数据
    aaabaraaa
    aaafooaaa
    aaazooaaa
    aaaqooaaa
    
    假设我想找到中心文本(在“aaa”之间),它不应该是“bar”或“foo”

PCRE 很容易1 => https://regex101.com/r/nJcbt1/1/

使用re2我会选择分而治之:用组来缩小范围,然后过滤。

使用 Golang 编写的解决方案 =>


[1] PCRE:Perl Compatible Regular Expressions

【讨论】:

    【解决方案2】:

    你可以使用这个正则表达式:

    ^[^45]
    

    ^ 匹配 start 而[^45] 匹配除了 45 之外的任何东西。

    【讨论】:

    • 如果你还想匹配空字符串,使用^(?:[^45]|$)
    • 是的,没错,感谢您添加这个重要的附录@TimPietzcker
    • 和这个类似的,里面包含-ed这个词怎么省略呢?对此link 有任何想法。这里 2 个匹配案例工作正常,但否定条件(不匹配案例)似乎不起作用。如果我错了,请纠正我。 @anubhava
    猜你喜欢
    • 2015-12-26
    • 2020-12-01
    • 2020-01-08
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 2021-10-14
    相关资源
    最近更新 更多