<div class=music><table><tr><td>(?<content>[^<>]+)</td></tr></table></div>

解决方案 »

  1.   

    没有用,使用.....表示其中还有其它的HTML标记
      

  2.   

    没太明白你的意思,你想提取的是什么?如果只是想提取里面包含地文字,不能单纯用表达式.
    先用表达式定位到<div class=music><table><tr><td>.....</td></tr></table></div>
    然后对这个字符串,使用表达式识别每一个html标记,用Stack可以获得文字。
      

  3.   

    如果你的意思是提取 <div></div>之间的内容的话,正则表达式应该是: 
    /<div>(.|\W)*<\/div>/i
      

  4.   

    还是没有解决,再说详细一点:
    我想做一个某网站页面内容的提取程序,要提取的页面内容包含在<div calssid=music>...</div>之中,现在的问题是在这个<div>中包含有<table><div>等其它标记,
    类似于
    <div calssid=music>
    <table><tr><td><div><img ...></div></td></tr></table>
    </div>
    而且在<table>中可能包含有其它更多的标记及<div>标记
    我如何将<div calssid=music>...</div>这部分内容全部提取出来呢?
      

  5.   

    这个简单,我这有自己写的例子。没有仔细雕琢,大家讨论一下。
    public string GetPage(string url, string flag, int pos)
    {
    if (url == "") return null; //url
    if (flag == "") return null;//标记
    if (pos < 0) return null;   //第几个标记 WebRequest wq = WebRequest.Create(url);
    WebResponse wp;
    try
    {
    wp = wq.GetResponse();
    }
    catch(Exception e)
    {
    return e.Message;
    } //获取整个URL内容
    StreamReader sr = new StreamReader(wp.GetResponseStream(),Encoding.Default);
    string s = sr.ReadToEnd();
    sr.Close();
    wp.Close();

    //提取flag之间的内容,比如<table>...</table>或者<td>...</td>
    string flagstart = "<" + flag;
    string flagend = "</" + flag + ">";
    int startpos = 0;
    int endpos = 0; Regex r = new Regex(flagstart,RegexOptions.IgnoreCase);
    Regex r1 = new Regex(flagend,RegexOptions.IgnoreCase);

    MatchCollection mc = r.Matches(s);
    MatchCollection mc1 = r1.Matches(s); int stack = 0;
    int i = pos;
    int j = 0; //while ((i < mc.Count) && (j < mc1.Count) && (mc[i].Index > mc1[j].Index)) j++; while ((i < mc.Count) && (j < mc1.Count))
    {
    if (mc[i].Index < mc1[j].Index)
    {
    stack ++;
    if (i < mc.Count) i ++;
    }
    else
    {
    if (j < mc1.Count) j ++;
    if (stack == 0) continue;
    if (--stack == 0) break;
    }
    //Console.WriteLine(stack);
    } if (stack == 0)
    {
    j--;
    i--;
    }
    else
    {
    while (j < mc1.Count)
    {
    j ++;
    if (--stack == 0) break;
    //Console.WriteLine(stack);
    } if (stack == 0)
    {
    j--;
    i--;
    }
    } if ((i < mc.Count) && (j < mc1.Count))
    {
    startpos = mc[i].Index;
    endpos = mc1[j].Index + flagend.Length;
    } s = s.Substring(startpos,endpos-startpos+1);
    return s;
    }
      

  6.   

    如此看来,正则表达式的功能也不怎么样强大,你的功能不用正则表达式也一样可以完成,不过还是谢谢 songbird(快乐鸟) 。再等待两天结贴