首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

正则表达式 最小 匹配,该怎么解决

2011-12-28 
正则表达式 最小 匹配[p:first] spanlang zh-cn | /span [/p][p:p][/p][p:1][p:2][p:3][p:4][

正则表达式 最小 匹配
[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\]

热点排行