微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

匹配除“

如何解决匹配除“

我想匹配任何字符(不区分大小写),除非在前面加上单引号后再加上“ 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),但是那没用。

要测试过程中是否使用了错误处理程序

谢谢!

解决方法

使用

^[^'\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'
,

已更新到正则表达式测试用例的链接: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',其后的任何表达式将从第一个字符开始检查。换句话说,如果找不到匹配项,则预读不会将正则表达式引擎移至下一个字符。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。