匹配除 ' 之外的任何字符

Match any character except '

我想匹配任何字符(不区分大小写),除非前面是单引号,后跟文本 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

谢谢!

已将 link 更新为正则表达式测试用例:https://regex101.com/r/UYll0h/6

由于 ' 不存在时就没有字符,因此您需要使用 look-ahead 断言。

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

完成

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

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

使用

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

使用i不区分大小写模式和m多行模式。参见 proof

说明

--------------------------------------------------------------------------------
  ^                        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'