日期:2014-05-18  浏览次数:20937 次

正则表达式匹配不出来。


我想匹配出 <div id="nbaVidRsltBody" style="visibility: visible; "> 和 <div id="nbaVidPagBtm"> 之间的内容

为什么使用以下两种都匹配不出来?错在哪里?

C# code
Regex r = new Regex(@"(?is)(?<=id=""nbaVidRsltBody"")(?:(?!id=""nbaVidPagBtm"").)*(?=id=""nbaVidPagBtm"")");


C# code
Regex r = new Regex(@"(?is)(?<=id=""nbaVidRsltBody""[^>]+>).+?(?=id=""nbaVidPagBtm"")");


------解决方案--------------------
C# code
            Regex re = new Regex(@"<div\b[^>]*?id=""nbaVidRsltBody""[^>]*>([\s\S]*?)<div\b[^>]*?id=""nbaVidPagBtm""[^>]*>", RegexOptions.IgnoreCase);
            Match match = re.Match(str);
            if(match.Success)
            {
                Console.WriteLine(match.Groups[1].Value);
            }

------解决方案--------------------
@"(?is)(?<=<div id=""nbaVidRsltBody""[^>]*>).+?(?=<div id=""nbaVidPagBtm"">)"
------解决方案--------------------
楼主怎么知道你给的两个正则没效果,用什么测试的,要么是你的测试数据有问题,要么是你的测试工具或代码有问题,你给的正则是可以取到结果的

C# code
string test = @"图挂掉了,具体情况看下面

<div id=""nbaVidRsltBody"" style....>

....(这里还有很多内容)

<div id=""nbaVidPagBtm"">  ";
Regex r = new Regex(@"(?is)(?<=id=""nbaVidRsltBody""[^>]+>).*?(?=id=""nbaVidPagBtm"")"); 
MatchCollection mc = r.Matches(test);
foreach (Match m in mc)
{
    richTextBox2.Text += m.Value + "\n";
}
/*-----输出-----


....(这里还有很多内容)

<div 
*/

------解决方案--------------------
建立一个txt文档,内容如下:
HTML code

<div id="nbaVidRsltBody" style="visibility: visible; "> fdahslflkaslkashllfhads347r84<div id="nbaVidPagBtm"> 
<div id="nbaVidRsltBody" style="visibility: visible; ">1231<div id="nbaVidPagBtm"> 
<div id="nbaVidRsltBody" style="visibility: visible; ">dfs4<div id="nbaVidPagBtm"> 
<div id="nbaVidRsltBody" style="visibility: visible; "> f333ds<div id="nbaVidPagBtm"> 
<div id="nbaVidRsltBody" style="visibility: visible; "> fdse34434343<div id="nbaVidPagBtm">