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

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)

Replies are listed 'Best First'.
Re^4: Substituting with match containing newline and space characters
by MorayJ (Beadle) on Mar 31, 2015 at 11:27 UTC

    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