负向零宽断言

负向零宽断言用于断言指定位置的前面或后面不能匹配指定的表达式。有两种类型,即

零宽度负预测先行断言:表达式为(?:exp),断言此位置的后面不能匹配表达式exp。

零宽度负回顾后发断言:表达式为(?<!exp),断言此位置的前面不能匹配表达式exp。

下面给定原始字符串,要求匹配数字123前面是字母、数字或下划线,后面不能跟大写字母。使用零宽度负预测先行断言进行匹配。

code.matlab
>> a='5123Wgh123hp123456';
>> m=regexp(a,'\w123(?![A-Z])','match')
m =
  1×2 cell 数组
    {'h123'}    {'p123'}

可见,给定字符串中第1个'123'因为后面跟了大写字母W,不能匹配。

下面给定原始字符串,要求匹配前面不是小写字母的5位数字。使用零宽度负回顾后发断言进行匹配。

code.matlab
>> a='abcD1234567';
>> m=regexp(a,'(?<![a-z])\d{5}','match')
m =
  1×1 cell 数组
    {'12345'}