Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re^2: Search and replace

by Bharath666 (Novice)
on Jan 31, 2013 at 15:53 UTC ( #1016344=note: print w/ replies, xml ) Need Help??


in reply to Re: Search and replace
in thread Search and replace

Thank you!! Really I am weak in handling regex of this kind. Thank you soooo much


Comment on Re^2: Search and replace
Replies are listed 'Best First'.
Re^3: Search and replace
by Bharath666 (Novice) on Jan 31, 2013 at 15:59 UTC

    Also if you don't mind can you please explain me how exactly this command works

    $found =~ s/ENV{\"(.*?)\"}/\$ENV(\"$1\")/g;

    Thanks!!

      I thought I already had. :-) But OK, let’s add an /x modifier to the regex to make it easier to break apart:

      $found =~ s/ ENV{\" # match the characters: ENV{" (.*?) # followed by any characters -- this sequence +is the "value", and the parentheses capture it into the special varia +ble $1 \"} # followed by: "} / \$ENV( # and substitute a literal: $ENV(" $1 # followed by the captured "value" \") # followed by: ") /gx; # and repeat the search & replacement to the e +nd of $found

      Notes:

      • The double quotes are backslashed only because I was using a one-liner (and I’m on Windows). This is unnecessary in a .pl script. (But the $ must be backslashed to show that it is literal, not the special symbol for “match the end of a line” (in the search part) or a sigil denoting a scalar variable to be interpolated (in the replacement part). Update: Added the words from “(in the search part)” to the end of the sentence.)

      • The ? in the capture group (.*?) makes the match non-greedy. So the regex engine looks for the fewest number of characters occurring between ENV{" and "}. Without the ?, the match would be greedy, and on the string:

        ENV{"VCINSTALLDIR"}\ATLMFC\LIB\amd64;ENV{"LIBPATH"}

        it would match

        VCINSTALLDIR"}\ATLMFC\LIB\amd64;ENV{"LIBPATH
      • which is not what we want!

      Hope that helps,

      Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

        Yeah!! I got it now :) Thanks a lot :)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1016344]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (7)
As of 2015-07-31 05:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (274 votes), past polls