【问题标题】:regex: find strings that do not begin with a certain prefix [duplicate]正则表达式:查找不以某个前缀开头的字符串[重复]
【发布时间】:2013-10-14 11:57:31
【问题描述】:

我想在字符串中查找一个单词,但前提是它不以前缀开头

例如。

我想找到 APP_PERFORM_TASK 的所有外观,但前提是它们不是以前缀 CMD_DO("

所以,

CMD_DO("APP_PERFORM_TASK")   <- OK (i don't need to know about this)  
BLAH("APP_PERFORM_TASK")     <-- NOT OK, this should match my search.

我试过了:

(?!CMD_DO\(")APP_PERFORM_TASK

但这不会产生我需要的结果。我做错了什么?

【问题讨论】:

  • 什么语言/引擎?
  • 我只是在寻找正则表达式。没什么特别的。
  • 但你所拥有的似乎工作:rubular.com/r/eKNxWoSLf8
  • 另外,thisthisthisthisthis 的可能重复项 ...
  • @ExplosionPills Lol,添加 i 标志,看看会发生什么;)

标签: regex grep


【解决方案1】:

这是一个快速的方法:

使用 --invert-match(也称为 -v)标志忽略 CMD_DO 并将结果通过管道传输到仅匹配 BLAH 的第二个 grep:

grep -v CMD_DO dummy | grep BLAH

【讨论】:

    【解决方案2】:

    尝试在您的正则表达式中将 NegativeLookAhead (?!) 替换为 NegativeLookBehind (?&lt;!)

    (?<!CMD_DO\(")APP_PERFORM_TASK
    

    检查此操作here

    【讨论】:

      【解决方案3】:

      根据您的评论:Let's concentrate on command line tool grep

      这是不使用-P 开关的grep 解决方案(类似于正则表达式的perl):

      grep 'APP_PERFORM_TASK' file | grep -v '^CMD_DO("'
      

      这是使用-P 开关和negative lokbehindgrep 解决方案:

      grep -P '(?<!^CMD_DO\(")APP_PERFORM_TASK' file
      

      【讨论】:

        【解决方案4】:

        试试这个

        (?!CMD_DO\(").*APP_PERFORM_TASK.*
        

        【讨论】:

          【解决方案5】:

          要处理具有理想和不理想形式的输入行,例如:

          CMD_DO("APP_PERFORM_TASK") BLAH("APP_PERFORM_TASK")
          

          你在 awk 中需要这样的东西(使用 GNU awk 进行 gensub()):

          awk -v s="APP_PERFORM_TASK" 'gensub("CMD_DO\\(\\""s,"","") ~ s' file
          

          即去掉所有不需要的字符串,然后测试剩下的。

          【讨论】:

            【解决方案6】:

            awk 版本

            awk '/APP_PERFORM_TASK/ && !/^CMD_DO/' file
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-01-22
              • 1970-01-01
              • 2022-07-06
              • 1970-01-01
              • 1970-01-01
              • 2020-09-13
              • 2014-10-28
              • 2016-07-04
              相关资源
              最近更新 更多