日期:2014-05-19  浏览次数:21247 次

正则表达式 最小 匹配
[p:first] <span   lang= "zh-cn "> | </span> &lt;&lt;[/p]  
[p:p]&lt;&lt;[/p]   [p:1][p:2][p:3][p:4][p:5]   [p:next]&gt;&gt;[/p]  
[p:last]&gt;&gt;|[/p]

即要成对匹配[p:xxx]和[/p]:
[p:first] <span   lang= "zh-cn "> | </span> &lt;&lt;[/p]
[p:p]&lt;&lt;[/p]
[p:next]&gt;&gt;[/p]
[p:last]&gt;&gt;|[/p]

而不匹配:
[p:1][p:2][p:3][p:4][p:5]

我是这样做的:
\[p:(? <pv> .*?)\](? <pm> .*?)\[/p\]
这里,我要取得pv和pm的值,谢谢。


------解决方案--------------------
这个式子很诡异,我也只好出此下策了

string yourStr = richTextBox1.Text;
yourStr = yourStr.Replace( "[/p] ", "[/p]\n ");
MatchCollection mc = Regex.Matches(yourStr, @ "\[p:[^\]]*?\](?!.*?\[p:[^\]]*?\].*?\[/p\]).*?\[/p\] ", RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n ";
}

------解决方案--------------------
\[p:(? <pv> [^\]]*?)\](?!.?\[p:[^\]]*?\].*?\[/p\])(? <pm> .*?)\[/p\]