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?
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|