#!/usr/bin/perl -w use strict; undef $/; # Slurp mode $_ = ; while (/<\?--([^-]*)-([^-]*)-->(.*?)<\/\?--\1-\2-->/sg) { print "1: ($1)\n"; print "2: ($2)\n"; print "3: ($3)\n"; } __DATA__ This is option 1 ok This is option 1 version b Option 1 version 3 Option 1 version 4 Perl