这个问题是为了试图理解以下答案之一:如何使用正则表达式检查字符串是否为回文?
给出的答案马库斯·贾德罗 is :
/^((.)(?1)\2|.?)$/
有人可以解释一下,这里到底发生了什么......我需要做类似的事情Perl
,但无法理解这个解决方案!
PS:我对 Perl 不太擅长,所以请放轻松......而且“如果你想严格的话,这不能被视为正则表达式” - 我读了这一行,所以我知道严格来说这不是正则表达式
-
^
- 匹配字符串的开头
-
(
- 开始捕获组#1
-
(.)
- 匹配除换行符之外的任何单个字符,将其保存在捕获组#2中
-
(?1)
- 递归 = 将此组替换为整个正则表达式捕获组 #1
-
\2
- 与捕获组 #2 匹配相同的内容。这要求字符串的第一个和最后一个字符相互匹配
-
|
- 创建替代方案
-
.?
- 可选择匹配不是换行符的任何一个字符 - 这通过匹配空字符串(当整个字符串为偶数长度时)或单个字符(当它为奇数长度时)来处理递归的结束
-
)
- 结束捕获组 #1
-
$
- 匹配字符串末尾或字符串末尾换行符之前。
递归(?1)
是关键。回文是一个空字符串、一个 1 个字符的字符串或第一个和最后一个字符相同并且它们之间的子字符串也是回文的字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)