in reply to RegEx - Positive Look-ahead
use strict; use warnings; use 5.012; use Text::Balanced qw( extract_tagged extract_multiple ); my $text = <<'END_OF_STRING'; {{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}} END_OF_STRING my @infoboxes = extract_multiple( $text, [ \&my_extractor], undef, 1 ) +; sub my_extractor { extract_tagged( $text, "{{", "}}", ); } for my $infobox (@infoboxes) { say $infobox; say '*' x 20; } --output:-- {{Infobox text text text {{text text text text {{text text}} text}} {{{text {{text }} text }}} }} ******************** {{Infobox text1 text1 text1 {{text1 text1 text1 text1 {{text1 text1}} text1}} {{{text1 {{text1 }} text1 }}} }} ******************** {{Infobox one}} ********************
Here's the same result using regexes via Regexp::Common:
use strict; use warnings; use 5.012; use Regexp::Common qw( balanced ); my $text = <<'END_OF_STRING'; {{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}} END_OF_STRING my $pattern = $RE{ balanced } { -begin => '{{' } { -end => '}}' }; while ($text =~ /($pattern)/gxms) { say $1; say '*' x 20; } --output:-- {{Infobox text text text {{text text text text {{text text}} text}} {{{text {{text }} text }}} }} ******************** {{Infobox text1 text1 text1 {{text1 text1 text1 text1 {{text1 text1}} text1}} {{{text1 {{text1 }} text1 }}} }} ******************** {{Infobox one}} ********************
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: RegEx - Positive Look-ahead
by tmharish (Friar) on Feb 06, 2013 at 07:35 UTC | |
|
Re^2: RegEx - Positive Look-ahead
by tmharish (Friar) on Feb 07, 2013 at 14:26 UTC |