I am using the following to extract data with a {{Infobox ... }} block, with the catch being that there might be {{ ... }} blocks within it:
use strict ; use warnings ; use Data::Dump qw( dump ) ; my @data = <DATA> ; my $data = join( '', @data ) ; my @info_box_contents ; while( $data =~ m/( {{Infobox .*? ({{(?=}}))? .*? }} )/xsg ) { print STDERR "MATCHED\n"; push @info_box_contents, $1 ; } dump( \@info_box_contents ) ; __DATA__ {{Infobox text text text {{text text text text {{text text}} text}} {{{text {{text }} text }}} }} blah blah blah blah blah blah {{Infobox text1 text1 text1 {{text1 text1 text1 text1 {{text1 text1}} text1}} {{{text1 {{text1 }} text1 }}} }} {{Infobox one}}
I get the following output:
MATCHED MATCHED MATCHED [ "{{Infobox\n text text text \n {{text text text \n text {{text text} +}", "{{Infobox\n text1 text1 text1 \n {{text1 text1 text1 \n text1 {{tex +t1 text1}}", "{{Infobox one}}", ]
I am expecting it to match the entire block up to the first mismatched '}}'
Whats more if I remove the '?' from my look-ahead and change that line from ({{(?=}}))? to ({{(?=}})) I match nothing.
Help will be greatly appreciated.
In reply to RegEx - Positive Look-ahead by tmharish
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |