日期:2014-05-20  浏览次数:20844 次

大家心目中正则的最厉害的一招展示
C# code

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 "";                    
        }
    }
}




我觉得上面这招是正则最厉害的一招

请大家把心目中觉得厉害的一招分享一下

大家相互学习下,谢谢


------解决方案--------------------
顶。 认真看下先。
------解决方案--------------------
效率上有多大变化?
------解决方案--------------------
围观。。。
------解决方案--------------------
string pattern = "'|&|<|>";
===
string pattern = "['&<>]+";

正则的魅力 要慢慢挖掘
------解决方案--------------------
这个。感觉普普通通的吧。
------解决方案--------------------
C# code
        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 "";
            }
        });

------解决方案--------------------
探讨

string pattern = "'|&amp;|<|>";
===
string pattern = "['&amp;<>]+";

正则的魅力 要慢慢挖掘

------解决方案--------------------
类似于Javascript里的String.replace方法,也支持第二个参数为函数

正好写过一个正则笔记:
http://beinet.cn/Blog/BlogShow.aspx?id=8fe6311d-ea7b-4e81-9fa1-465b593c82c1
------解决方案--------------------
C# code
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})+$)"));
  }
}