2

我想匹配任何字符(不区分大小写),除非前面有一个单引号,然后是 On Error Goto 文本:

匹配:

on error goto err_handler
if aap = 0 then on error goto Myerrorhandler
    on error goto errorhandler1
   on error goto errorhandler2

不符合:

' on error goto errorhandler3
'   if aap =0 then on error goto errorhandler4
Any line not containing On Error Goto

我试过了:[^']*(On Error Goto)但这没有用。

用于测试程序中是否使用了Errorhandler

谢谢!

4

2 回答 2

2

更新了正则表达式测试用例的链接:https ://regex101.com/r/UYll0h/6

由于不存在时'不能有字符,因此您需要使用前瞻断言。

'由于在前一行on error goto(如在行中)中也可能有代码的其他字符(除了) if aap = 0 then on error goto Myerrorhandler,要处理这些字符,您还需要设置一个条件来检查'在外观之后是否存在除 之外的任何字符 -先。这将由([^']+)?.

^(?!')([^']+)?on error goto

(?)称为前瞻。它检查其中的字符是否存在。与, 不同,即使没有字符,也会断言 true [](?)例如,[a]将检查第一个字符是否为 'a',但它之后的任何表达式都将从第二个字符开始检查。另一方面,(?=a)将检查第一个字符是否为 'a',并且它之后的任何表达式都将从第一个字符开始检查。换句话说,如果未找到匹配项,则前瞻不会将正则表达式引擎移动到下一个字符。

于 2020-10-10T20:47:07.053 回答
2

利用

^[^'\n\r]*On Error Goto

使用i不区分大小写的模式和m多行模式。见证明

解释

--------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  [^'\n\r]*                any character except: ''', '\n' (newline),
                           '\r' (carriage return) (0 or more times
                           (matching the most amount possible))
--------------------------------------------------------------------------------
  On Error Goto            'On Error Goto'
于 2020-10-10T22:20:16.473 回答