为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式 零宽断言该怎么理解?

正则表达式 零宽断言该怎么理解?

PIPIONE 2018-08-10 10:09:36
Regex Golf上的两道题:第五题要求排除包含abba格式子字符串的字符串,如abba,commotive,trillion……其中一个正确答案是/^(?!.*(.)(.)\2\1)/abba格式用/(.)(.)\2\1/比较好解决,排除则是用的零宽断言的(?!exp),然后我对整个表达式理解的是:“开头位置之后跟的不是任意个字符+abba字符的字符串”,但如果这么理解的话,反过来“结尾位置之前不是abba字符+任意个字符的字符串”,即表达式/(?!(.)(.)\2\1.*)$/应该也是成立的啊,然而事实是这个表达式是错误的。同样对于第七题,要求匹配内容为素数个x的字符串,如xx,xxx,xxxxx……某一个正确答案是^(?!(xx+)\1+$),思路就是排除有大于等于2的因数的数目同样我觉得(?!^(xx+)\1+)$应该也是可以的啊,但事实上这也是个错误答案。。。感觉应该是自己对零宽断言理解不到位,但具体什么错在哪一直没能理解,求告知~以及,是不是真的有必要把正则研究到Regex Golf题目的那种程度?
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

匹配1,要求后面不是2,这么用 /1(?!2)/
你那种写法是 要求后面不是2,但是没匹配任何东西,不管什么字符串,总能找到后面不是2的地方

查看完整回答
反对 回复 2018-09-16
  • 1 回答
  • 0 关注
  • 549 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信