【问题标题】:Regex match a line without a specific word正则表达式匹配没有特定单词的行
【发布时间】:2014-12-16 17:14:59
【问题描述】:

我想使用正则表达式来突出显示新编程语言的功能,但我在排除带有“导出”一词的函数时遇到问题 所以

我必须匹配示例的行:

routine hello
ROUTINE hello
   routine hello
   ROUTINE hello(a:INTEGER)
   routine hello (a   :  INTEGER)
   routine hello (a   :  INTEGER , b: STRING)

我不想匹配示例的行:

   routine hello (a   :  INTEGER , b: STRING) exported

我试过了

^[[:blank:]]*routine[[:blank:]]+([[:alnum:]_])+[[:blank:]]*([[:alnum:]_:,[:space:]]*)/^(?!.*exported)$/

但它不起作用。

【问题讨论】:

    标签: regex


    【解决方案1】:

    以下表达式也可以解决问题:

    ^(?!.*exported).*$
    
    |________________   line begin 
     |_______________   negative lookahead
        |____________   any characters
          |__________   your exclusion word
                   |_   any characters
                     |_ end of line
    

    【讨论】:

    • 解释:^(?!.*exported):“确保该行 ((?!)) 不以 (^) 开头的任何 0 个或多个字符 (.*) 后跟“导出”。 " .*$: "选择整行。"
    【解决方案2】:

    您可以使用这样的表达式来匹配所有不包含单词“exported”的行:

    (?m)^(?!.*\bexported\b).*$
    

    【讨论】:

    猜你喜欢
    • 2013-02-08
    • 1970-01-01
    • 2021-12-02
    • 2016-03-02
    • 2013-06-10
    • 2019-09-29
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多