代码之家  ›  专栏  ›  技术社区  ›  AlwaysLearning

不包含数字5的数字

  •  1
  • AlwaysLearning  · 技术社区  · 7 年前

    我试着使用消极的前瞻性,根据 this reply 要匹配不包含数字5的数字:

    echo "aaa 123467890 3456 bbb" | egrep '[(?!5)[:digit:]]+'
    

    有没有办法 egrep 排除 5 来自班级 [:digit:] ? (我进行了多次搜索,但没有找到任何东西)

    1 回复  |  直到 7 年前
        1
  •  5
  •   melpomene    7 年前

    正则表达式有两个问题:

    1. egrep (在POSIX扩展正则表达式中)根本不支持向前看或向后看。
    2. 即使是这样, [(?!5)[:digit:]] [[:digit:]()!?] . ( 在字符类中没有任何特殊意义。

    白鹭 也不支持取反的命名字符类(如 [[:^digit:]] ).

    你只有两个选择:

    • 手动计算集差并显式列出:

      egrep '[0-46-9]+'
      
    • grep -P '[^\D5]+'
      

      (使用双反和集合并集计算集合差的技巧:我们匹配任何不是非数字或非数字的字符 5 )或者

      grep -P '(?:(?!5)\d)+'