Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式搜索模式选择:(This1)和(This2,但仅当找到This1时)_Regex_Recursion_Find - Fatal编程技术网

Regex 正则表达式搜索模式选择:(This1)和(This2,但仅当找到This1时)

Regex 正则表达式搜索模式选择:(This1)和(This2,但仅当找到This1时),regex,recursion,find,Regex,Recursion,Find,编辑:我相信我在这里寻找的解决方案是递归 关于这个 我试图找到一种方法,在文本的某个部分搜索标题,然后选择标题的某个部分,以及它下面的某个特定部分,这也需要一个小的条件搜索 文本格式如下所示: Private Sub NAV_VE124_Click() 'Open the picture in its description field Call ShowPic(Me.NAV_VE124.Description) End Sub 我想选择VE124在其描述字段中打开图片 或者

编辑:我相信我在这里寻找的解决方案是递归

关于这个

我试图找到一种方法,在文本的某个部分搜索标题,然后选择标题的某个部分,以及它下面的某个特定部分,这也需要一个小的条件搜索

文本格式如下所示:

Private Sub NAV_VE124_Click()
    'Open the picture in its description field
    Call ShowPic(Me.NAV_VE124.Description)
End Sub 
我想选择
VE124在其描述字段中打开图片

或者,更一般地说,我想要
导航
单击()
之间的所有内容,以及从
'
调用
的所有内容(不是换行符,因为有些描述有多行文本)


任何想法或帮助都将不胜感激。我有大约20000个这样的目录,所以我有点不知道怎么做。

好的,我想这应该可以做到:

.*NAV_(.*)Click\(\)((?:\r\n\s*'(?:[^\r\n]*))*)(?:\r\n^((?!Sub NAV_).)*)*
如果我的任何假设不正确,请告诉我

  • 在第一次导航之前,我们不关心这些东西(不过你可能想检查潜艇)
    • *
  • 我们想找到文字导航_
    • 导航_
  • 我们希望找到在Click()之前的任何内容并捕获它(我们可以查找任何不是空格的内容,因为Click()之后会有空格,稍后我们将匹配Click()
    • ([^\s]*)
  • 我们希望匹配Click()(您可能只希望匹配开口(如果有参数)
    • 单击\(\)
  • 现在事情变得有趣了,我将把这些片段分解

    • (((?:\r\n\s*”(?:[^\r\n]*))*)
      • \r\n\s*'此位获取换行符和开始注释的单引号
      • (?:[^\r\n]*)此位获取所有注释文本(除换行符外的任何内容)
      • 末尾的*允许多行注释
      • 外圆括号表示我们感兴趣的部分
  • 现在,我们只需忽略所有其他内容,直到下一个子导航(使用前瞻)

    • (?:\r\n^((?!子导航)。)
考虑到你似乎在从VB代码中提取注释,也许可以看看像doxygen/castle windsor这样的工具,看看它们是否有帮助。如果我在问题中遗漏了一些东西,你可能会发现这开始超出常规语言的范围,需要一些正则表达式以外的东西


编辑:完成了部分完整的正则表达式

Hmm…虽然这似乎是正确的,但它似乎选择了完整的一行,包括
Private Sub
Nav
,它也没有选择
之后的文本。
确定。我已经使用记事本++进行了测试(使用“环绕”和“不”。匹配换行)然后用
$1$2\r\n
替换完整的正则表达式,我会得到方法列表及其注释。可能换行符不匹配,或者您使用的工具与Notepad++不匹配。我会尝试Notepad++和\n而不是\r\n。此外……它仍然会匹配完整的行,包括
Private Sub
,但是替换将我忽略这一点,只使用两组。