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