use strict;
my $str = '<!-- <h1>[!WLANSettings]</h1> -->
[@if:examplevar=notgiven]this text won\'t show[@endif:examplevar]
[@if:wlanena]
[@if:wlanauto]
<table id="wlanavail" class="colorrows inputtable">
<tr id="firstrow">
<th width="30px"></th>
<th width="240px">[!Name] (SSID)</th>
<th width="110px">[!Encryption]</th>
<th width="150px">[!SignalStrength]</th>
<th width="200px">[!MAC]</th>
</tr>
<tr id="loadingrow">
<td colspan=5 class="centertext"><img src="resources/loading.gif"
id="loadingWlanScan"></td>
</tr>
<tr>
<td></td>
<td colspan=4><input type="button" id="rescan"
value="[!Refresh]" style="width: 200px"></td>
</tr>
</table>
<p></p>
[@endif:wlanauto]
<table id="wlansettings" class="inputTable">
<tr id="wlannamerow" [@if:wlanauto]style="display: none;"[@endif:wlanauto]>
<td>[!WLANName]</td>
<td><input type="text" name="wlanname" id="wlanname"
[@if:wlanauto]value="[@wlanname]"[@endif:wlanauto] style="width: 309px;"></td>
</tr>
<tr>
<td>[!Password]:</td>
<td><input type="text" name="wlanpass" id="wlanpass"
style="width: 309px;"></td>
</tr>
<tr>
<td colspan="2" >
<input type="button"
[@if:wlanauto]id="manualcfg" name="manualcfg" value="[!ManualConfig]"[@endif:wlanauto]
[@ifnot:wlanauto]id="autocfg" name="autocfg" value="[!AutomaticConfig]"[@endif:wlanauto]
onclick="handleMultiform(event, this);" style="width: 180px;">
</td>
</tr>
<tr>
<td>
<input type="hidden" name="encinput" id="encinput" value=""></td>
<td id="wlaninfo"></td>
</tr>
</table>
[@ipsettings]
[@endif:wlanena]
[@ifnot:wlanena]
[!NoWLANDevicePluggedIn]
<p>
<input type="button" name="back" onclick="handleMultiform(event, this);" value="[!Back]" />
</p>
[@endif:wlanena]
';
my $regex = qr/\[\@if(not)?:([a-zA-Z0-9]+)(?:=(.*?))?\].*?\[\@endif:\2\]/sp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html