正则表达式以标识对方法名称的分配

时间:2018-11-14 13:08:26

标签: regex vb.net

尝试构建一个正则表达式,当不包含返回类型时,该表达式将查找对函数名称的所有分配。

到目前为止,我已经创建了此正则表达式,

(?s)Function(?:(?!End Function).)*?A =.*?End Function

我不熟悉的部分是如何避免使用从函数中找到的下一个单词对A进行硬编码。

正则表达式引擎是Visual Studio的搜索对象,因此是.net。

//match
Function A() As Integer   
   A = 3
End Function

//do not match
Function Β() As Integer
   A = 3
End Function

1 个答案:

答案 0 :(得分:1)

您可以使用(\w+)捕获名称,然后使用\b\1\b向整个单词反向引用:

(?s)Function\s+(\w+)\b(?:(?!(?:End )?Function).)*?\b\1\b\s*=.*?End Function
            ^^^^^^^^^^                            ^^^^^^   

请参见regex demo

详细信息

  • \s+(\w+)\b-1个或多个空格,然后捕获匹配一个或多个单词字符的第1组,然后是单词边界
  • \b\1\b-\1与作为整个单词被捕获到第1组的文本相同(因为它被单词边界包围)。

您可以阅读more about backreferences here