in reply to Re: Try this in Regexp palindrome
in thread Try this in Regexp palindrome

Your delayed-evaluation expression isn't quite right. It won't match palindromes like 'feef' that don't have a central character. You need to make the single dot optional. And if you put the alternation in the middle, you won't match one-character "palindromes".

You can also simplify your search by putting the pattern in a lookahead and doing a while-global match:

$_ = 'abcdegedfc'; # Try it without the g, too. my $re; $re = qr/((.)(?:(??{$re})|.?)\2)/; print "$1\n" while (/(?=$re)/g);
If you change the * to a + in the reverse version, you exclude single-character palindromes. The lookahead while-global trick helps here, too:
$_ = 'abcdegedfc'; print "$1\n" while (/(?=((.+).?(??{quotemeta reverse $2})))/g);

Caution: Contents may have been coded under pressure.

Replies are listed 'Best First'.
Re^3: Try this in Regexp palindrome
by bart (Canon) on Mar 21, 2005 at 17:21 UTC
    Your delayed-evaluation expression isn't quite right. It won't match palindromes like 'feef' that don't have a central character. You need to make the single dot optional.
    You're right. I knew that, and I still forgot about it. Thanks for the correction.