regex - 从 Notepad++ 中提取 FunctionList 的函数名称

标签 regex windows function notepad++

我正在尝试在 Notepad++ 中为新语言设置函数列表。为此,我需要在 functionlist.xml 中添加一个解析器。我添加了解析器,它可以工作,但它还在函数列表中添加了实际的单词 function 。如何从中删除单词功能?我研究了正则表达式的lookbehind 功能。但我无法让它发挥作用。

这是解析器。

<parser displayName="mylang" id="mylang_syntax">
  <function mainExpr="^\s*(function|Function|FUNCTION)[\t ]+[\w]+">
    <functionName>
      <NameExpr expr="/(?<=^function /)[\w]+" />
      <NameExpr expr="/(?<=^Function /)[\w]+" />
      <nameexpr expr="/(?<=^FUNCTION /)[\w]+" />
    </functionName>
  </function>
</parser>

这是一个可供尝试的示例文本

FUNCTION uniqn, input_array
  IF(!DEBUG) THEN PRINT, 'uniqn_no_sort'
  counter = 0L
  length = n_elements(input_array(*, 0))
  duplicate_array = STRARR(length)
END

function get_algorithm_type, type
  IF(!DEBUG) THEN PRINT, 'get_algorithm_type'
  print, type
END

这就是它在函数列表侧栏中的样子。我想删除“功能”一词。 请注意它需要在 Notepad++ 中运行。 (我无法使用任何其他文本编辑器)。预先感谢您的帮助。

enter image description here

这里有其他帮助。

最佳答案

尝试下面的正则表达式:

(?i)(?<=^function)\s+\K\w+

<强> Click for Regex Demo

正则表达式说明:

  • (?i) - 使搜索不区分大小写的修饰符
  • (?<=^function) - 正向后查找以查找子字符串 function 紧邻的位置在行的开头
  • \s+ - 匹配 1 次以上出现的空白字符
  • \K - 忘记到目前为止匹配的所有内容
  • \w+ - 匹配字符类 [a-zA-Z0-9_] 内所有字符出现 1 次以上的情况

添加以下内容parser标记到文件 functionList.xml

<parser id="mylang" displayName="mylang_syntax">
    <function mainExpr="(?i)(?<=^function)\s+\K\w+" />
</parser>

输出

如下所示,function 之间有额外的空格。和 functionName也被忽视了 enter image description here

关于regex - 从 Notepad++ 中提取 FunctionList 的函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48410830/

相关文章:

c++ - Windows 线程 sleep 并从另一个线程唤醒

windows - 如何在 Windows 开始菜单中允许我的程序到 "Run As"?

javascript - 在javascript中的函数内部访问函数内部的变量?

函数中的 C++ 指针和引用

c# - 从 Windows 资源管理器拖放到我的应用程序的文本框中

c++ - 匿名命名空间中的私有(private)静态成员函数还是自由函数?

python - 识别正则表达式匹配的前缀

regex - 什么是可以测试字符串是否为有效 Firebase key 的正则表达式?

javascript - 正则表达式中的重音符号有什么用?

正则表达式捕获尾随星号但不包装星号