在hacker news上看到regex golf,几道很有趣的正则表达式的题,有的需要用到不匹配这种匹配,比如需要匹配不包含某个单词的串。
开始正题之前,先来看看正则表达式的语法:
正则表达式中有(?=a)和(?!a)来表示我们是否需要匹配某个东西。
所以,有需要不匹配某样内容时,就可以用(?!a)了。比如要匹配不含hello的字符串就可以这样写。
这里.*用来表示hello之前可能有其他的字符,为什么还要加^呢,因为如果不加的话,可能匹配到h之后的这个位置上了。
现在就可以解决regex golf上的abba这道题了。
这道题是去匹配不含abba这种形式的单词,比如abba,anallagmatic就不应该匹配上。
正则表达式代码:
然后利用不匹配,还可以解决prime这道题,这道题匹配有素数个x的串,先看正则。
(xx+)是匹配2个及2个以上的x,(xx+)1+就是匹配重复出现2个及以上的串,所以(xx+)1+就表示了那些非素数的串,那么素数串就是除去这些非素数串,即是以上的正则表达式了。