I need a loop, because the regex by itself doesn't search for the longest palindrome, so I added a /^/ anchor to avoid any potential, useless backtacking. It doesn't actually chnage the result.my $re; $re = qr/((.)(??{ $re })\2|.)/; my $s = 'abcdegedfc'; foreach my $i (0 .. length($s) - 1) { local $\ = "\n"; # add newline to print substr($s, $i) =~ /^$re/ and print $1; }
This little program prints:
a b c deged ege g e d f cSo all you still have to do, is keep the longest match from the loops.
update: I found a second working regex, inspired by holli who came up with the idea to use reverse:
Output is identical to the previous program.my $s = 'abcdegedfc'; foreach my $i (0 .. length($s) - 1) { local $\ = "\n"; # add newline to print substr($s, $i) =~ /((.*).?(??{ quotemeta reverse $2 }))/ and print $1; }
In reply to Re: Try this in Regexp palindrome
by bart
in thread Try this in Regexp palindrome
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |