【问题标题】:Ignore substring in regex match忽略正则表达式匹配中的子字符串
【发布时间】:2014-07-13 11:46:09
【问题描述】:

我正在为 Notepad++ 编写一个函数列表解析器来添加对 Nasal 的支持。

我正在使用以下正则表达式:

^[\t ]*(var[\n\s]+)?([_A-Za-z]?[\w_]*)[\n\s]*=[\n\s]*func[\n\s]*(\([^\)\(]*\))?:Debuggex Demo

...匹配这两种类型的有效声明:

  1. foo = func...
  2. var foo = func...

为了进一步从这个正则表达式的匹配中提取函数名foo,我能想到的最好的方法是:

(var[\n\s]+)?([_A-Za-z]?[\w_]*):Debuggex Demo

根据具体情况,使用此匹配“foo”或“var foo”。什么是正则表达式可以忽略子字符串var[\n\s]+]的存在,所以它只为函数列表提取“foo”?

非常感谢。

【问题讨论】:

    标签: regex substring notepad++


    【解决方案1】:

    您可以使用\K 功能从匹配结果中删除左侧的所有内容:

    (?:var\s+)?\K([A-Za-z_]\w*)\s*=\s*([A-Za-z_]\w*)
    

    (请注意,此功能仅在最新版本的 np++ 中可用)

    【讨论】:

      【解决方案2】:

      从索引 2 中获取匹配组。

      (\bvar\b)?\s\s*(\w+)\s\s*=\s\s*func\b
      

      Online demo

      【讨论】:

        猜你喜欢
        • 2021-01-31
        • 2017-12-07
        • 1970-01-01
        • 1970-01-01
        • 2017-08-31
        • 2011-11-08
        • 1970-01-01
        • 1970-01-01
        • 2017-10-29
        相关资源
        最近更新 更多