8000""> ** 这里是不固定的字符串2 ** </font>
<font color=""#008000""> ** 这里是不固定的字符串3 ** </font> ";
MatchCollection mc = Regex.Matches(test, @"(?is)(?<=(<font[^>]*>))(?:(?!</?font\b).)*(?=</font>)");
for(int i=0;i<mc.Count;i++)
{
richTextBox2.Text += "第" + (i+1) + "轮匹配结果:\n";
richTextBox2.Text += "Group[0]:" + mc[i].Value + "\n";
richTextBox2.Text += "Group:" + mc[i].Groups.Value + "\n---------------\n";
}
/*--------输出--------
第1轮匹配结果:
Group[0]: ** 这里是不固定的字符串1 **
Group:<font color="#008000">
---------------
第2轮匹配结果:
Group[0]: ** 这里是不固定的字符串2 **
Group:<font color="#008000">
---------------
第3轮匹配结果:
Group[0]: ** 这里是不固定的字符串3 **
Group:<font color="#008000">
---------------
*/
3.2 逆序环视应用总结
通过对逆序环视的分析,可以看出,逆序环视中使用不定长度的量词,匹配过程很复杂,代价也是很大的,这也许也是目前绝大多数语言不支持逆序环视,或是不支持在逆序环视中使用不定长度量词的原因吧。
在正则应用中需要注意的几点:
1、 不要轻易在逆序环视中使用不定长度的量词,除非确实需要;
2、 在任何场景下,不只是逆序环视中,不要轻易使用量词修饰匹配范围非常大的子表达式,小数点“.”和“[\s\S]”之类的,使用时尤其要注意。