regex 匹配除'以外的任何字符

toiithl6  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(125)

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

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
谢谢你,谢谢

34gzjxbg

34gzjxbg1#

使用

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

y3bcpkx12#

更新了regex测试用例的链接:https://regex101.com/r/UYll0h/6
因为当'不存在的时候就不可能有字符,所以你需要使用一个前瞻Assert。
由于在on error goto之前的行(如if aap = 0 then on error goto Myerrorhandler行)中也可能存在代码的其他字符(除了'),因此要处理这些字符,您还需要设置一个条件来检查是否存在除'之外的任何字符。这将由([^']+)?完成。
^(?!')([^']+)?on error goto
(?)被称为look-ahead。它检查里面的字符是否存在。与[]不同,(?)即使没有字符也会Asserttrue。例如,[a]将检查第一个字符是否为'a',但它之后的任何表达式都将从第二个字符开始检查。另一方面,(?=a)将检查第一个字符是否为'a',并且它之后的任何表达式都将从第一个字符开始检查。换句话说,如果没有找到匹配项,则前瞻不会将正则表达式引擎移动到下一个字符。

相关问题