美文网首页
正则-回文

正则-回文

作者: RossH | 来源:发表于2019-04-16 17:19 被阅读0次

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


    内心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。

    文中涉及链接

    相关文章

      网友评论

          本文标题:正则-回文

          本文链接:https://www.haomeiwen.com/subject/qavbwqtx.html