in reply to Re: Substituting with match containing newline and space characters
in thread Substituting with match containing newline and space characters

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

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

Replies are listed 'Best First'.
Re^3: Substituting with match containing newline and space characters
by jeffa (Bishop) on Mar 30, 2015 at 18:11 UTC

    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