in reply to Re^2: Unrecognized escape \Q passed through in regex
in thread Unrecognized escape \Q passed through in regex
Not necessarily. It won't work for
print($regexp) Expect Gives -------------- ------------ ---------- \Q*\E\Q*\E \*\* \*\Q*\E \Q**LOL** \*\*LOL\*\* \Q**LOL** \\Quit\\Exit \\Quit\\Exit \Quit\Exit \Qfoo\\E foo\\\\E foo\\
Solution:
my $in_quote = 0; $regexp =~ s/([^\\]|\\.)/ if ($in_quote) { if ($1 eq '\\E') { $in_quote = 0; '' } else { quotemeta($1) } } else { if ($1 eq '\\Q') { $in_quote = 1; '' } else { $1 } } /eg;
Update: Alternative:
$regexp =~ s/ \G ( (?:[^\\]|\\[^Q])* ) (?: \\Q (?:[^\\]|\\[^E])* (?:\\E)? )? / $1 . (defined($2) ? quotemeta($2) : '') /xge;
Neither snippet is fully tested. In fact, both are known to be unable to handle regexps in which (?{...}) or (?{{...}}) are used. What's wrong with what I suggested in my earlier post?
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^4: Unrecognized escape \Q passed through in regex
by Articuno (Beadle) on Jan 26, 2006 at 19:13 UTC | |
by ikegami (Patriarch) on Jan 26, 2006 at 19:31 UTC | |
by Articuno (Beadle) on Jan 26, 2006 at 19:57 UTC |
In Section
Seekers of Perl Wisdom