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

在.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;
        }

正则表达式中问号等特殊字符的转义,布布扣,bubuko.com

时间: 05-24

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

Shell命令行中特殊字符与其转义详解(去除特殊含义)

特殊符号及其转义 大家都知道在一个shell命令是由命令名和它的参数组成的, 比如 cat testfile, 其中cat是命令名, testfile是参数. shell将参数testfile传递给cat命令. 但是, 如果参数中含有特殊字符, 比如说*, *我们知道,是表示任意多个(包括0个)任意字符. 那么shell的工作方式是,它会对这些特殊字符进行预先处理, 然后再将处理的结果传给那个命令. 比如说,如果你的当前目录有file, file1, file2 三个文件, 那么当你执行cat

正则表达式中的特殊字符

正则表达式中的特殊字符 \ 在字面意义和特殊意义之间进行切换.例如\w 表示\w 的特殊意义(见下面的解释)而不是字面值w,但是\$表示不使用$的特殊意义(见下面的解释)而是使用$字符本身^ 字符串的开头$ 字符串的结尾* 零次或多次+ 一次或多次? 零次或一次. 除换行符外的任何字符\b 单词边界\B 非单词边界\d 0-9 的任何数字(与[0-9]相同)\D 任何非数字\f 换页符(form feed)\n 换行符 \r 回车符\s 任何一个空白字符(与[ \f\n\r\t\v]相同)\S

【python】pymongo中正则查询时的转义问题

在查询mongo时用到了正则查询 设字符串为   str = '/ab/cd.ef?g=' 直接用正则查询没有匹配. collection.find({"re":{'$regex':str},'b':{'$nin':[False]}}).count() 原因是 /  .  ? 都是正则表达式中的特殊字符,如果要保留原义则需要用"\"来进行转义 即把字符串改成  str = '\/ab\/cd\.ef\?g=' 但是,由于"\"在python中是一

正则表达式中各种字符的意义

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的. 正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 3.1 普通字符 由所有那些未显式指定为元字符的

正则表达式中各种字符的含义

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的. 正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 3.1 普通字符 由所有那些未显式指定为元字符的

正则表达式中各字符的含义

正则表达式中各种字符的含义 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的. 正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 3.1 普通字符 由

python 正则表达式中反斜杠(\)的麻烦和陷阱

这里是一点小心得:由于下面两个原因,在正则表达式中使用反斜杠就会产生了一个双重转换的问题.(1).python自身处理字符串时,反斜杠是用于转义字符 (2).正则表达式也使用反斜杠来转义字符     要匹配字符串中1个反斜杠应该怎么写正则表达式?"\\",这样行吗?试试就知道了,re模块抛异常了,因为在正则表达式中,"\\"就是一个反斜杠,对于正则表达式解析器来说,是一个转义字符,但是后面啥也没有,自然就报错了,"\\\"三个肯定是不行的,试试四

正则表达式中原子的5种类型

原子是正则表达式的最基本的组成单位,而且在每个模式中最少包含一个原子.原子是由所有那些未显示指定为元字符的打印和非打印字符组成,所以在这里将其详细划分为五类进行介绍. ①普通字符作为原子 普通字符是编写正则表达式时最常见的原子了,包括所有的大写和小写字母字符.所有数字等.例如,a——z.A——Z.0——9. ’/5/’        –用于匹配字符串中是否有5这个字符出现 ’/php/’      –用于匹配字符串中是否有PHP字符串出现 ②一些特殊字符和元字符作为原子 任何一个符号都可以作为原

python&#160;正则表达式中反斜杠(\)的麻烦和陷阱&#160;(转)

这里是一点小心得:由于下面两个原因,在正则表达式中使用反斜杠就会产生了一个双重转换的问题.(1).python自身处理字符串时,反斜杠是用于转义字符 (2).正则表达式也使用反斜杠来转义字符     要匹配字符串中1个反斜杠应该怎么写正则表达式?"\\",这样行吗?试试就知道了,re模块抛异常了,因为在正则表达式中,"\\"就是一个反斜杠,对于正则表达式解析器来说,是一个转义字符,但是后面啥也没有,自然就报错了,"\\\"三个肯定是不行的,试试四