using System;
using System.Text.RegularExpressions;class Program
{
static void Main(string[] args)
{
string str = "<You're angle & evil>";
string pattern = "'|&|<|>"; Regex regex = new Regex(pattern); Program prog = new Program();
MatchEvaluator evaluator = new MatchEvaluator(prog.ConvertToXML);
Console.WriteLine(regex.Replace(str, evaluator));
Console.Read();
} //把正则表达式的匹配到的字符转换成xml能正常识别的标识
public string ConvertToXML(Match m)
{
               //string s0=m.Groups[0].Value;
       //string s1=m.Groups[1].Value;
       //string s2=m.Groups[2].Value;
switch (m.Value)
{
case "'":
return "&apos";
case "&":
return "&amp";
case "<":
return "&lt";
case ">":
return "&gt";
default:
return "";                    
}
}
}我觉得上面这招是正则最厉害的一招请大家把心目中觉得厉害的一招分享一下大家相互学习下,谢谢

解决方案 »

  1.   

    string pattern = "'|&|<|>";
    ===
    string pattern = "['&<>]+";正则的魅力 要慢慢挖掘
      

  2.   

            string str = "<You're angle & evil>";
            string pattern = "['&<>]";
            //str = Regex.Replace(str, pattern, new MatchEvaluator(delegate(Match m) {             // or               
            str = Regex.Replace(str, pattern, m =>
            {
                switch (m.Value)
                {
                    case "'":
                        return "&apos";
                    case "&":
                        return "&amp";
                    case "<":
                        return "&lt";
                    case ">":
                        return "&gt";
                    default:
                        return "";
                }
            });
      

  3.   

    类似于Javascript里的String.replace方法,也支持第二个参数为函数正好写过一个正则笔记:
    http://beinet.cn/Blog/BlogShow.aspx?id=8fe6311d-ea7b-4e81-9fa1-465b593c82c1
      

  4.   

    struct UInt96
    {
      ulong hi;
      uint  lo;
      
      // 构造函数
      public UInt96(ulong h, uint l)
      {
        hi = h;
        lo = l;
      }
      
      // 返回加1后的结果
      public UInt96 Inc()
      {
        if (lo < 0xFFFFFFFF) return new UInt96(hi, lo + 1);
        return new UInt96(hi + 1, 0);
      }
      
      // 自增运算符
      public static UInt96 operator ++(UInt96 x)
      {
        return x.Inc();
      }
      
      // 十六进制字符串表示
      public override string ToString()
      {
        return string.Join(" ", Regex.Split(string.Format("{0:X16}{1:X8}", hi, lo), "(?!^)(?=(?:.{4})+$)"));
      }
    }最后这个正则如何:"(?!^)(?=(?:.{4})+$)"来源:http://topic.csdn.net/u/20101126/09/bf43ae57-aff2-456d-98f8-b1aa0ea16a21.html
      

  5.   

    string s = "1234567890";
    string t = string.Join(" ", Regex.Split(s, "(?!^)(?=(?:.{4})+$)"));
    // 就是把一个字符串从右往左每4位加一个空格,结果是:"12 3456 7890"
      

  6.   

    string s = "1234567890";// 考虑了一下,这样更简单:
    string t = Regex.Replace(s, "(?!^)(?=(?:.{4})+$)", " ");
    // 把一个字符串从右往左每4位加一个空格,结果是:"12 3456 7890"
      

  7.   

    还有这个贴子,也是讨论正则的应用的:
    http://topic.csdn.net/u/20081011/15/3895f4e7-5f71-4fcd-af35-e5b43457b12f.html看看27楼,和LZ的有些相似:
      // 去掉SQL语句中的注释
      static string RemoveSqlComment(string sql)
      {
        return Regex.Replace
        (
          sql,
          @"(?ms)'[^']*'|--.*?$|/\*.*?\*/",
          delegate(Match m)
          {
            switch (m.Value[0])
            {
              case '-': return "";
              case '/': return " ";
              default : return m.Value;
            }
          }
        );
      }
      

  8.   

        string s = "某某的面积是12345678平方米";
        string t = Regex.Replace(s, @"(?<=\d)(?=(\d\d\d)+(?!\d))", ",");
        // 同理,这个正则的作用是把一串数字每3位加一个逗号。
        Console.WriteLine(t); // 输出:某某的面积是12,345,678平方米
      

  9.   

    这个正则也很牛:
    using System;
    using System.Text.RegularExpressions;class Program
    {
      // 把阿拉伯数字的金额转换为中文大写数字
      static string ConvertToChinese(double x)
      {
        string s = x.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");
        string d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}");
        return Regex.Replace(d, ".", delegate(Match m) { return "负元空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟萬億兆京垓秭穰"[m.Value[0] - '-'].ToString(); });
      }  static void Main()
      {
        Random r = new Random();
        for (int i = 0; i < 10; i++)
        {
          double x = r.Next() / 100.0;
          Console.WriteLine("{0,14:N2}: {1}", x, ConvertToChinese(x));
        }
      }
    }
    /* 可能的输出:
      5,607,400.68: 伍佰陆拾萬柒仟肆佰元陆角捌分
      2,017,723.33: 贰佰零壹萬柒仟柒佰贰拾叁元叁角叁分
        751,181.17: 柒拾伍萬壹仟壹佰捌拾壹元壹角柒分
      7,849,851.53: 柒佰捌拾肆萬玖仟捌佰伍拾壹元伍角叁分
      2,629,143.90: 贰佰陆拾贰萬玖仟壹佰肆拾叁元玖角
     13,461,629.68: 壹仟叁佰肆拾陆萬壹仟陆佰贰拾玖元陆角捌分
      4,594,391.16: 肆佰伍拾玖萬肆仟叁佰玖拾壹元壹角陆分
     13,046,560.60: 壹仟叁佰零肆萬陆仟伍佰陆拾元陆角
     13,041,371.21: 壹仟叁佰零肆萬壹仟叁佰柒拾壹元贰角壹分
     20,639,609.44: 贰仟零陆拾叁萬玖仟陆佰零玖元肆角肆分
    */
      

  10.   


    不能说我在泼冷水:
    string s = System.Security.SecurityElement.Escape("<You're angle & evil>");
      

  11.   

    强的人一般都比较低调,你们的正则确实写的可以,但如果能打包成.dll文件,封装成公共的方法供大家调用,那就是完美。 写程序需要向服务器靠拢。 
       如何优化视图?一个视图里添加6张表 数据量100W左右,而且建立视图的时候用过分组,现在就连在数据库本地查询 都得4到5分钟 有时还慢 啊 我的头都大了  大侠们 如何解决?  谁愿意帮我解决啊 
      

  12.   

    楼上的这位 指 army369168520
      

  13.   

    // 去掉SQL语句中的注释
      static string RemoveSqlComment(string sql)
      {
        return Regex.Replace
        (
          sql,
          @"(?ms)'[^']*'|--.*?$|/\*.*?\*/",
          delegate(Match m)
          {
            switch (m.Value[0])
            {
              case '-': return "";
              case '/': return " ";
              default : return m.Value;
            }
          }
        );
      }
      

  14.   

    var ver = top.opera ? (opera.version().replace(/\d$/, "") - 0)
            : parseFloat((/(?:IE |fox\/|ome\/|ion\/)(\d+\.\d)/.
              exec(navigator.userAgent) || [, 0])[1]);
    var dom = {
        ie: !!top.VBArray && Math.max(document.documentMode || 0, ver),
        firefox: !!top.crypto && ver, //内核Gecko
        opera: !!top.opera && ver, //内核 Presto 9.5为Kestrel 10为Carakan
        chrome: !!(top.google && top.chrome) && ver, //内核V8
        safari: /apple/i.test(navigator.vendor) && ver// 内核 WebCore
    }
      

  15.   

    public static void main(String[] args) {
    String s = "abcd1234";
    String[] arr1 = s.split("(?<=\\G.{1})"); // [a, b, c, d, 1, 2, 3, 4]
    String[] arr2 = s.split("(?<=\\B.{2})(?=\\B.{3})"); // [abc, d, 1, 234]
    String[] arr3 = s.split("(?=\\B.{2})");  // [a, b, c, d, 1, 2, 34]
    }
      

  16.   

    string pattern = "['&amp;<>]{1}";