今天在写一个多行注释的正则表达式的时候发现了一个这样的问题,最开始写的是:
Slash.Asterisk.(NOT(Asterisk),Asterisk.NOT(Slash))*.Asterisk.Slash;
结果发现它不能匹配/***/的情况。因为在匹配中间那个*的时候,它还匹配了其后的NOT(Slash),这就把后面的那个*给消耗掉了,因此最后就只剩下一个/了,就无法匹配了。
后来我把它改成了:
Slash.Asterisk.(NOT(Slash),NOT(Asterisk).Slash)*.Asterisk.Slash;
这样就成功了。
其实第一次我想的是:*后不能有/,而第二次我想的是/前不能有*,就导致了一次成功一次失败,A后不能是B,与B前不能是A是不一样的,这也许是个哲学问题。

没有评论:
发表评论