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)
In reply to Re^3: Substituting with match containing newline and space characters
by jeffa
in thread Substituting with match containing newline and space characters
by MorayJ
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |