正则表达式中问号等特殊字符的转义

在.NET Framework 开发人员指南 的 字符转义 一节 有这样一段话。除 .$ ^ { [ ( | ) * + ? \ 外,其他字符与自身匹配。但是其中并未注明这些字符应该匹配为什么字符。为了方便自己以后查阅,也为了方便网友搜索我就写在这里了。
[Sipo] 点的转义:.  ==> \\u002E 美元符号的转义:$  ==> \\u0024 乘方符号的转义:^  ==> \\u005E 左大括号的转义:{  ==> \\u007B 左方括号的转义:[  ==> \\u005B 左圆括号的转义:(  ==> \\u0028 竖线的转义:| ==> \\u007C 右圆括号的转义:) ==> \\u0029 星号的转义:*  ==> \\u002A 加号的转义:+  ==> \\u002B 问号的转义:?  ==> \\u003F 反斜杠的转义:\ ==> \\u005C

*、+ 和 ? 限定符都被称为“贪心的”,因为它们匹配尽可能多的文本。但是,有时您只需要最小的匹配。

例如,您可能搜索 HTML 文档,以查找括在 H1 标记内的气动隔膜泵章节标题。该文本在您的文档中如下:
<H1>Chapter 1 – Introduction to Regular Expressions</H1>

下面的表达式匹配从开始小于符号 (<) 到关闭 H1 标记的大于符号 (>) 之间的所有内容。
/<.*>/

如果您只需要匹配开始 H1 标记,下面的“非贪心”表达式只匹配 <H1>。
/<.*?>/

通过在 *、+ 或 ? 限定符之后放置 ?,该表达式从“贪心”表达式转换为“非贪心”表达式或者最小匹配。

编写所需要的正则表达式时是比较麻烦的事,很容易出错,有时还要转义。

因此可以考虑将一些简单的正则表达式,直接通过气动隔膜泵示例字符串来自动生成。

下面是可变部分仅为数字时,生成方法。


        public string GetRegexFromSample(string sSample)
        {

            string sRegex = sSample;
            string sSpecial = "\\.$^{[(|)*+?";
            for (int i = 0; i < sSpecial.Length; i++)
            {http://www.it168.com/
                char ch = sSpecial[i];
                int n = (int)ch;
                string s = String.Format("\\00{0:X}",n);
                sRegex = sRegex.Replace(ch.ToString(), s);
            }
           
            Regex reg = new Regex( "(\\d+)", RegexOptions.IgnoreCase);
            MatchCollection mc = reg.Matches(sSample);

            foreach (Match m in mc)
            {
                sRegex = sRegex.Replace(m.Groups[1].Value, "\\d+");
            }

            return sRegex;
        }

posted @ 2014-05-19 10:56  lanhe  阅读(2614)  评论(0编辑  收藏  举报
数据中心