in reply to Perl Regex Multiline Matching
G'day yoda54,
"I am a bit confused with multi line matching, how can I get the value of property name "Text" to match since it spans across multiple lines?"
The main problem with your code is that you're not dealing with multilines. You're reading one line at a time from the DATA filehandle. This is determined by the input record separator[$/] which is set to newline by default: you'd need to change this — I'd recommend localising the change in an anonymous block.
Here's the technique:
#!/usr/bin/env perl use 5.014; use strict; use warnings; my $re; BEGIN { $re = qr{(?msx: name="([^"]+)" .*? value="([^"]*)" )} +} { local $/ = '/>'; while (<DATA>) { next unless /$re/; say 'name=[', $1, ']; value=[', $2 =~ y/ \n/ /rs, ']'; } } __DATA__ <property name="Own" value=""/> <property name="Type" value="Record"/> <property name="Text" value="Sample text more sample text more more same text]."/> <property name="Unique" value="yes"/>
Output:
name=[Own]; value=[] name=[Type]; value=[Record] name=[Text]; value=[Sample text more sample text more more same text]. +] name=[Unique]; value=[yes]
— Ken
|
|---|