首页 新闻 会员 周边

正则表达式高手进 高级匹配

0
悬赏园豆:140 [已关闭问题]

规则如下

<div class='ad'>

<div>dfdferhgthghg</div>

<div>tgtgfbvf</div>

<div>rtrggf</div>

...................div个数不定

</div>

匹配从<div class='ad'>到</div>的所有字符串,中间的div 必须是嵌套出现

 

bochins的主页 bochins | 初学一级 | 园豆:2
提问于:2009-12-06 18:43
< >
分享
其他回答(2)
0
代码
static void Main(string[] args)
{
string srcString = @"<div class='test'></div><div class='ad'>
<div>aaaaa</div>
<div>bbbbb</div>
<div>cccccc</div><table><tr><td>Div Table Contest</td></tr></table>
</div><table><tr><td>outer Content</td></tr></table>
";
string regex=@"(?<=<div class='ad'.*>)([\s\S]*)(?=</div>)";
Console.Write(FilterByDiv(srcString, regex));

Console.ReadKey();
}

public static string FilterByDiv(string sHtml,string regex)
{
System.Text.RegularExpressions.Regex ex
= new System.Text.RegularExpressions.Regex(regex, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
return ex.Match(sHtml).Value.Trim();
}

 

运行结果:
<div>aaaaa</div>
<div>bbbbb</div>
<div>cccccc</div><table><tr><td>Div Table Contest</td></tr></table>

邀月 | 园豆:25475 (高人七级) | 2009-12-06 19:57
0

string beginstr="<div class='ad'>";

string endstr="</div>"; 

Regex rg = new Regex(string.Format(@"{0}(?<g1>.*){1}", beginstr, endstr));
           if (rg.IsMatch(input))
           {
               return rg.Match(input).Groups["g1"].Value;
           }

persialee | 园豆:3217 (老鸟四级) | 2009-12-06 20:25
0

使用贪婪模式是不准确的,对于类似下面这种源字符得到的结果就是错误的

aaaaa
<div class='ad'>

<div>dfdferhgthghg</div>

<div>tgtgfbvf</div>

<div>rtrggf</div>

...................div个数不定

</div>
bbbbb
<div>test</div>

 这种需求还是要用平衡组

代码
Regex reg = new Regex(@"(?is)<div\s+class='ad'[^>]*>(?><div[^>]*>(?<o>)|</div>(?<-o>)|(?:(?!</?div\b).)*)*(?(o)(?!))</div>");
MatchCollection mc = reg.Matches(yourStr);
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n";
}

 

 

-过客- | 园豆:205 (菜鸟二级) | 2009-12-06 20:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册