Это регулярное выражение соответствует палиндромам: ^((.)(?1)\2|.?)$
Не могу понять, как это работает. Когда заканчивается рекурсия и когда регулярное выражение прерывается из рекурсивного подшаблона и переходит в "|.?"
часть?
Спасибо.
изменить: извините, я не объяснил \2
и (?1)
(?1)
- относится к первому подшаблону (самому себе)
\2
- обратная ссылка на совпадение второго подшаблона, то есть (.)
Выше пример написан на PHP. Соответствует как «abba» (без символа среднего палиндрома), так и «abcba» - имеет средний неотраженный символ.
.?
, вероятно, для строк нечетной длины. - person nhahtdh   schedule 26.07.2012(?1)
и\2
? - person Alvin Wong   schedule 26.07.2012echo 123454321 | perl -Mre=debug -ne '/^((.)(?1)\2|.?)$/x'
- person ninjalj   schedule 26.07.2012(?1)
= переход в группу 1,\2
= обратная ссылка для соответствия из группы 2 - person ninjalj   schedule 26.07.2012