// include the latest version of the regex crate in your Cargo.toml
extern crate regex;
use regex::Regex;
fn main() {
let regex = Regex::new(r"(?s)\[\@if(not)?:([a-zA-Z0-9]+)(?:=(.*?))?\].*?\[\@endif:\2\]").unwrap();
let string = "<!-- <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]
";
// result will be an iterator over tuples containing the start and end indices for each match in the string
let result = regex.captures_iter(string);
for mat in result {
println!("{:?}", mat);
}
}
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 Rust, please visit: https://docs.rs/regex/latest/regex/