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題目的那種程度?
正則表達式 零寬斷言該怎么理解?
PIPIONE
2018-08-10 10:09:36