(?is) <title>(?> <title[^>]*>(? <o>)| </title>(? <-o>)|(?:(?! </?title\b).)*)*(?(o)(?!)) </title>哪们大牛可以给俺讲讲这个正则的意思,比如:(?is)有啥用,还有后面的

解决方案 »

  1.   

    (?i) 是忽略大小写
    (?s) 是单行模式,改变小数点的匹配行为,使小数点可以匹配任意字符参考
    .NET正则基础之——.NET正则匹配模式 至于后面的表达式,这个正则书写很像我的风格,但我应该没写过这样的正则,因为title是基本上不会涉及到嵌套的,也就用不到平衡组,简单的用个非贪婪模式就可以了
    (?is)<title>(?<title>.*?)</title>如果对平衡组感兴趣,参考
    .NET正则基础之——平衡组 
      

  2.   

    看了过客的说明,还是没明白这段代码起到了什么作用
    实际运行之后的title有什么不同
      

  3.   


    涉及到title标签时,基本上都是提取,而title一般是不会出现嵌套的,至少我还没见到过,所以使用简单的非贪婪模式,把内容提取出来就是了至于说到(?is),主要是html的代码并不都是很规范的,有时标签可能会出现大写,甚至大小写混合的情况,所以用了(?i)来忽略大小写
    (?s)主要是考虑用小数点来匹配任意字符,不过title中几乎不会出现换行,所以这个加不加也无所谓了
    Regex reg = new Regex(@"(?is)<title>(?<title>.*?)</title>");
    Match m = reg.Match(yourStr);
    if (m.Success)
    {
        richTextBox2.Text = m.Groups["title"].Value;
    }至于楼主所给的那个正则,因为这种需求中用不到平衡组,而且我的博客中也基本上覆盖到了,所以也就不多解释了正则根据实际需求来写,只考虑必要的情况,写最适合的正则
      

  4.   

    (?is) <title>(?> <title[^>]*>(? <o>)| </title>(? <-o>)|(?:(?! </?title\b).)*)*(?(o)(?!)) </title>
    就是一个不区分大小写,并且可以匹配所有行。然后取出页面上的<title>标签及标签内的内容;