Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: Substituting with match containing newline and space characters

by kroach (Pilgrim)
on Mar 30, 2015 at 13:18 UTC ( #1121829=note: print w/replies, xml ) Need Help??


in reply to Substituting with match containing newline and space characters

Using a single regex to substitute the match seems to work:

$my_file =~ s/(input type=\"checkbox\".*?(\w+)\[0\]")/$1 label="$2"/gs;

The only modification I made to your original expression is adding " at the end of the outermost capture group.

  • Comment on Re: Substituting with match containing newline and space characters
  • Download Code

Replies are listed 'Best First'.
Re^2: Substituting with match containing newline and space characters
by MorayJ (Beadle) on Mar 30, 2015 at 13:46 UTC

    Thanks, I need to go through the file and that didn't work for me in the 'while'...

    while ($my_file =~ /(input type=\"checkbox\".*?\.(\w+)\[0\]\")/sg) { my $sub = $1; my $sub1 = $2; $my_file =~ s/\Q$sub\E/\Q$sub\E id=\"$sub1\"/;

    This gets the code swapping out, but is now littered with escape characters...may go down the parser route, but good to know about the escaping.

    Thanks for your help

      You really should use an HTML parser to handle this job, but the following regular expression and substitution "trick" might just be robust enough to handle your data:

      use strict; use warnings; my $data = do { local $/; <DATA> }; $data =~ s/ (<input.*?ng-model=") ([^[]+) (\[\d+\]") (.*?) / $1 . $2 . $3 . qq( label="@{[ (split '\.', $2)[-1] ]}") . $4 /exgs ; print $data; __DATA__ <input type="checkbox" ng-model="data.mydebts.loan[0]" <input type="checkbox" ng-model="foo.bar.baz.qux[2]" /> <input type="checkbox" ng-model="foo[300]" >

      Results:

      <input type="checkbox"
          ng-model="data.mydebts.loan[0]" label="loan"
      
      <input type="checkbox"
          ng-model="foo.bar.baz.qux[2]" label="qux" />
      
      <input type="checkbox"
          ng-model="foo[300]" label="foo" >
      

      jeffa

      L-LL-L--L-LL-L--L-LL-L--
      -R--R-RR-R--R-RR-R--R-RR
      B--B--B--B--B--B--B--B--
      H---H---H---H---H---H---
      (the triplet paradiddle with high-hat)
      

        Thanks for looking at that, and I can see how that works, which it would, at least on most of them if I've been consistent in the html* (* I probably haven't)

        But taken the advice of the parser. Tried using the one recommended in the first reply, but it wouldn't install, so went with HTML::Parser, which I've used before

        Don't find it ideal for printing out again, but that's probably my skill level, but it definitely shows learning (relearning in this case as I've used it before quite a while ago) the right tool for the job pays dividends as got the job done in less time in the end

        Thanks again

        MorayJ

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (5)
As of 2020-10-20 08:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My favourite web site is:












    Results (209 votes). Check out past polls.

    Notices?