Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I am trying to read this text file and extract the values into the $1,$2 so forth variables, but it seems not to work. It's not letting me match the <?--1-1--> and </?--1-1--> tags. Any help on how I could to the match and use its values stored into the variables above? Thanks a lot!!!!! Here is the text file I am trying to do the match against:
<?--1-1--> <b>This is option 1 ok</b> </?--1-1--> <?--1-2--> <b>This is option 1 version b</b> </?--1-2--> <?--1-3--> <b>Option 1 version 3</b> </?--1-3--> <?--1-Version4--> <b>Option 1 version 4 Perl</b> </?--1-Version4-->

Here is the piece of the code trying to extract the information from the text file.
my $filename="test.txt"; my $template_data = "/content".$filename; open(DATA_IN, "$template_data") || print "Can't open output file1: + $template_data\n"; #my @file = <DATA_IN>; # read it into @file #foreach my $line (@file){ #chomp($line); #print @file; while(<DATA_IN>){ # if($line =~/^(<\?--\.*\-\.*\-->)\s(.*)\s(<\/\?--\.*\-\.*\-->)\ +s/ig){ # if($_=~/^<\?--(.*)-(.*)-->(.*)<\/\?--(.*)-(.*)-->/){ # if($_=~/(<\?--(.*)-(.*)-->)(.*)(<(.*)>)/g){ #<?--1-1--> if($_=~/^<\?--(.*)-(.*)-->(.*)<\/\?--(.*)-(.*)-->/g){ # if($_=~/^<(.*)>(.*)<(.*)>/g){ print "<b>$1</b>"; print $2; print "<b>$3</b>"; }else{ print "$Nothing"; } }

Thank you!

Replies are listed 'Best First'.
Re: Regular Expression
by sauoq (Abbot) on Oct 16, 2002 at 19:40 UTC

    You need to slurp all of your data into a variable and use the /s modifier on your regex. You also need to be careful about how you are using your greedy matching. Finally, use backreferences to match the ending tags to the start tags. Here's how I might do it:

    #!/usr/bin/perl -w use strict; undef $/; # Slurp mode $_ = <DATA>; while (/<\?--([^-]*)-([^-]*)-->(.*?)<\/\?--\1-\2-->/sg) { print "1: ($1)\n"; print "2: ($2)\n"; print "3: ($3)\n"; } __DATA__ <?--1-1--> <b>This is option 1 ok</b> </?--1-1--> <?--1-2--> <b>This is option 1 version b</b> </?--1-2--> <?--1-3--> <b>Option 1 version 3</b> </?--1-3--> <?--1-Version4--> <b>Option 1 version 4 Perl</b> </?--1-Version4-->
    -sauoq
    "My two cents aren't worth a dime.";
    
      Thank you very much!!!!!!!