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.";
In reply to Re: Regular Expression
by sauoq
in thread Regular Expression
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |