页面信息为http://www.google.com:C#代码为:
strResult = Regex.Replace(strPageContent, @"<style[.\n]*</style>", " "); 
可是配不上“<style>[^<]</style>” 在这个例子里是可以工作的,
但是有时候,尖括号之间还包含尖括号,所以我写了上面的式子,但是不行。第一次发帖,请求帮助,谢谢大家! 

解决方案 »

  1.   

    @"<style[^<>]*>(?:(?!</style>)[\s\S])*</style>"
      

  2.   

    using System;
    using System.Text.RegularExpressions;class Program
    {
        static void Main(string[] args)
        {
            string input = "前<style>http://www.google.com\n</style>后";        // 首先[.]是错误的,"."不可以直接放在[]里用
            // <style>.*</style> 中的 * 是贪婪匹配符,它会尽量多匹配自己修饰的 ".",而无视</style>,将它匹配成"."。
            // 解决方法是在 * 后边加上 ? 惰性匹配符。这样遇到</style>两可的情况会不袒护自己修饰的".",而结束"."的匹配。
            // 另外你可以更改"."的定义,让它涵盖 /n 的意思,例如
            System.Console.WriteLine(Regex.Replace(input, @"<style>.*?</style>", "", RegexOptions.Singleline));
            // 或者这样,括号内相当于应用了 RegexOptions.Singleline 模式,这样 /n 也会被"."匹配掉。
            System.Console.WriteLine(Regex.Replace(input, @"<style>(?s:.*?)</style>", ""));        // 另一种更科学的阻止贪婪匹配的方法是使用零宽度断言,它表示一个右边界的存在(也有左边界的零宽度断言)
            // 例如左侧以</style>结束的一串字符,可以用.*(?!</style>)表示。
            System.Console.WriteLine(Regex.Replace(input, @"<style>.*(?=</style>)</style>", "", RegexOptions.Singleline));
            Console.ReadKey();        // 此外你还说到多层尖括号,其实可以用平衡组定义取得每一层的内容。不过你好像只是要替换,就用不着那个了。
        }
    }
      

  3.   

    我不知道你想要什么效果,你是不是想把<style>....</style>内容匹配为" ",你可以试试这样:
    "<style[^>]*>[^<]*</style>"