in reply to Try this in Regexp palindrome
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; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Try this in Regexp palindrome
by Roy Johnson (Monsignor) on Mar 21, 2005 at 14:18 UTC | |
by bart (Canon) on Mar 21, 2005 at 17:21 UTC |