【发布时间】:2012-07-25 02:06:14
【问题描述】:
这个正则表达式匹配回文:
^((.)(?1)\2|.?)$
无法理解它是如何工作的。
递归何时结束,何时正则表达式从递归子模式中中断并转到"|.?" 部分?
谢谢。
编辑:抱歉我没有解释\2和(?1)
(?1) - 指代第一个子模式(对其自身)
\2 - 反向引用第二个子模式的匹配,即(.)
上面的例子是用 PHP 编写的。匹配“abba”(没有中间回文字符)和“abcba” - 有一个中间的非反射字符
【问题讨论】:
-
这在程序员中可能会更好,因为这真的不是一个“实用”的问题。
-
.?可能用于奇数长度的字符串。 -
抱歉,请问
(?1)和\2是什么? -
Perl 的调试工具比 PCRE 好,试试:
echo 123454321 | perl -Mre=debug -ne '/^((.)(?1)\2|.?)$/x' -
@AlvinWong:
(?1)=recurse into group 1,\2=backreference to match from group 2
标签: php regex recursion pcre palindrome