故事的开始在于我今天不小心点开了某微信群,又恰巧看到了有人问,正则表达式怎么匹配回文?一开始我是这样的👇

内心OS:现在不用代码判断回文,要用正则表达式来匹配了吗?我要跟不上了呀。正则表达式怎么判断前后字符串呢?正则表达式没有类似于循环的功能,怎么匹配任意长度的回文呢?
压抑不住内心的好奇,跑去各种搜索。但结果都是配合代码完成的,并没有纯粹依赖正则表达式就可以完成。不死心的我果断Google。找到如下回答。

简而言之,就是正则表达式可以匹配所有小于某个有限固定长度的回文,但无法接受所有回文(匹配任意长度的回文)
于是乎我就回到群里试图说明这是不可能完成的。但猿友非常笃定是可以完成的,随后丢了个链接,说是这网站上的第六题。我就又懵了。既然出了题就应该是可以解的,但我stack overflow上看到的回答又很合理。现在只能是实践出真知了。
抱着学习的态度,我打开了猿友提供的链接,并一路做到了第六题,终于看到了罪魁祸首。

Emmm......看到题目前面很明显的Abba,加上我也试了下,得出结论是,这题只需要识别出回文形式为abba并且不匹配存在回文的字符串就行。也就是说,是有固定有限长度的。
估计是猿友没有注意审题,或者是想拓展下吧。
最后,我把我最终结果发群里,顺便再说了下正则表达式无法匹配任意长度的回文哈哈。
如果有其他猿友看到本文,然后知道是可以完成的,麻烦批评下我,顺便给我普及下知识。谢谢🙏

这里简单解释下题目答案
^((?!(\w)(\w)\3\2).)*$
,如有错漏,麻烦指正。(\w)
匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。并且获取这一匹配。\2
匹配第二个获取的内容。举下例子:(\w)(\w)\2\1
匹配ABBA,第一个(\w)
获取字母A,且这是第一个获取到的内容,然后\1
匹配这第一个获取到的内容A。以此类推,(\w)(\w)(\w)(\w)\4\3\2\1
匹配ABCDDCBA。?!
不匹配其后面跟着的pattern。
网友评论