正则表达式学习参考
1 概述
正则表达式(Regular Expression)是一种匹配模式,描述的是一串文本的特征。
正如自然语言中“高大”、“坚固”等词语抽象出来描述事物特征一样,正则表达式就是字符的高度抽象,用来描述字符串的特征。
正则表达式(以下简称正则,Regex)通常不独立存在,各种编程语言和工具作为宿主语言提供对正则的支持,并根据自身语言的特点,进行一定的剪裁或扩展。
正则入门很容易,有限的语法规则很容易掌握,但是目前正则的普及率并不高,主要是因为正则的流派众多,各种宿主语言提供的文档都过多的关注于自身的一些细节,而这些细节通常是初学者并不需要关注的。
当然,如果想要深入的了解正则表达式,这些细节又是必须被关注的,这是后话,让我们先从正则的基础开始,进入正则表达式的世界。
2 正则表达式基础
2.1 基本概念
2.1.1 字符串组成
对于字符串“a5”,是由两个字符“a”、“5”以及三个位置组成的,这一点对于正则表达式的匹配原理理解很重要。
2.1.2 占有字符和零宽度
正则表达式匹配过程中,如果子表达式匹配到的是字符内容,而非位置,并被保存到最终的匹配结果中,那么就认为这个子表达式是占有字符的;如果子表达式匹配的仅仅是位置,或者匹配的内容并不保存到最终的匹配结果中,那么就认为这个子表达式是零宽度的。
占有字符还是零宽度,是针对匹配的内容是否保存到最终的匹配结果中而言的。
占有字符是互斥的,零宽度是非互斥的。也就是一个字符,同一时间只能由一个子表达式匹配,而一个位置,却可以同时由多个零宽度的子表达式匹配。
2.1.3 正则表达式构成
正则表达式由两种字符构成。一种是在正则表达式中具体特殊意义的“元字符”,另一种是普通的“文本字符”。
元字符可以是一个字符,如“^”,也可以是一个字符序列,如“\w”。
2.2 元字符(Meta Character)
2.2.1 […] 字符组(Character Classes)
字符组可以匹配[ ]中包含的任意一个字符。虽然可以是任意一个,但只能是一个。
字符组支持由连字符“-”来表示一个范围。当“-”前后构成范围时,要求前面字符的码位小于后面字符的码位。
[^…] 排除型字符组。排除型字符组表示任意一个未列出的字符,同样只能是一个。排除型字符组同样支持由连字符“-”来表示一个范围。
表达式
|
说明
|
[abc]
|
表示“a”或“b”或“c”
|
[0-9]
|
表示0~9中任意一个数字,等价于[0123456789]
|
[\u4e00-\u9fa5]
|
表示任意一个汉字
|
[^a1<]
|
表示除“a”、“1”、“<”外的其它任意一个字符
|
[^a-z]
|
表示除小写字母外的任意一个字符
|
举例:
“[0-9][0-9]”在匹配“Windows 2003”时,匹配成功,匹配的结果为“20”。
“[^inW]”在匹配“Windows 2003”时,匹配成功,匹配的结果为“d”。
2.2.2 常见字符范围缩写
对于一些常用的字符范围,如数字等,由于非常常用,即使使用[0-9]这样的字符组仍显得麻烦,所以定义了一些元字符,来表示常见的字符范围。
表达式
|
说明
|
\d
|
任意一个数字,相当于[0-9],即0~9 中的任意一个
|
\w
|
任意一个字母或数字或下划线,相当于[a-zA-Z0-9_]
|
\s
|
任意空白字符,相当于[ \r\n\f\t\v]
|
\D
|
任意一个非数字字符,\d取反,相当于[^0-9]
|
\W
|
\w取反,相当于[^a-zA-Z0-9_]
|
\S
|
任意非空白字符,\s取反,相当于[^ \r\n\f\t\v]
|
举例:
“\w\s\d”在匹配“Windows 2003”时,匹配成功,匹配的结果为“s 2”。
2.2.3 . 小数点
小数点可以匹配除“\n”以外的任意一个字符。如果要匹配包括“\n”在内的所有字符,一般用[\s\S],或者是用“.”加(?s)匹配模式来实现。
表达式
|
说明
|
.
|
匹配除了换行符 \n 以外的任意一个字符
|
2.2.4 其它元字符
表达式
|
说明
|
^
|
匹配字符串开始的位置,不匹配任何字符
|
$
|
匹配字符串结束的位置,不匹配任何字符
|
\b
|
匹配单词边界,不匹配任何字符
|
举例:
“^a”在匹配“cba”时,匹配失败,因为表达式要求开始位置后面是字符“a”,而“cba”显然是不满足的。
“\d$”在匹配“123”时,匹配成功,匹配结果为“3”,这个表达式要求匹配结尾处的数字,如果结尾处不是数字,如“123abc”,则是匹配失败的。
2.2.5 转义字符
一些不可见字符,或是在正则中具有特殊意义的元字符,如想匹配字符本身,需要用“\”对其进行转义。
表达式
|
说明
|
\r,\n
|
回车和换行
|
\\
|
匹配“\”本身
|
\^,\$,\.
|
分别匹配“^”、“$”和“.”
|
以下字符在匹配其本身时,通常需要进行转义。在实际应用中,根据具体情况,需要转义的字符可能不止如下所列字符
. $ ^ { [ ( | ) * + ? \
2.2.6 量词(Quantifier)
量词表示一个子表达式可以匹配的次数。量词可以用来修饰一个字符、字符组,或是用()括起来的子表达式。一些常用的量词被定义成独立的元字符。
表达式
|
说明
|
举例
|
{m}
|
表达式匹配m次
|
“\d{3}”相当于“\d\d\d ”
“(abc){2}”相当于“abcabc”
|
{m,n}
|
表达式匹配最少m次,最多n次
|
“\d{2,3}”可以匹配“12”或“321”等2到3位的数字
|
{m,}
|
表达式至少匹配m次
|
“[a-z]{8,}”表示至少8位以上的字母
|
?
|
表达式匹配0次或1次,相当于{0,1}
|
“ab?”可以匹配“a”或“ab”
|
*
|
表达式匹配0次或任意多次,相当于{0,}
|
“<[^>]*>”中“[^>]*”表示0个或任意多个不是“>”的字符
|
+
|
表达式匹配1次或意多次,至少1次,相当于{1,}
|
“\d\s+\d”表示两个数字中间,至少有一个以上的空白字符
|
注意:在不是动态生成的正则表达式中,不要出现“{1}”这样的量词,如“\w{1}”在结果上等价于“\w”,但是会降低匹配效率和可读性,属于画蛇添足的做法。
2.2.7 分支结构(Alternation)
当一个字符串的某一子串具有多种可能时,采用分支结构来匹配,“|”表示多个子表达式之间“或”的关系,“|”是以()限定范围的,如果在“|”的左右两侧没有()来限定范围,那么它的作用范围即为“|”左右两侧整体。
举例:
“^aa|b$”在匹配“cccb”时,是可以匹配成功的,匹配的结果是“b”,因为这个表达式表示匹配“^aa”或“b$”,而“b$”在匹配“cccb ”时是可以匹配成功的。
“^(aa|b)$”在区配“cccb”时,是匹配失败的,因为这个表达式表示在“开始”和“结束”位置之间只能是“aa”或“b”,而“cccb”显然是不满足的。
3 正则表达式进阶
3.1 捕获组(Capture Group)
捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或手动命名的组里,以供后面引用。
表达式
|
说明
|
(Expression)
|
普通捕获组,将子表达式Expression匹配的内容保存到以数字编号的组里
|
color: #
分享到:
Global site tag (gtag.js) - Google Analytics
|
相关推荐
### 正则表达式入门与基础详解 #### 一、正则表达式的概念与作用 正则表达式(Regular ...通过以上基础知识的学习,读者可以逐渐掌握正则表达式的使用方法,进一步深入探索更复杂的正则表达式功能和应用场景。
正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。...通过阅读《正则表达式学习参考.pdf》这样的资料,你可以更系统地掌握这一强大工具。
在编程领域,C#语言以其强大的功能和易用性深受开发者喜爱。特别是在处理文本操作时,字符串和正则表达式...通过深入阅读《C#字符串和正则表达式参考手册》,你将能够更全面地理解这两个主题,并将其运用到日常工作中。
它的出版,为程序员和开发人员提供了一本实用性强的正则表达式学习资源。本书基于各种实用场景,从基础的文本匹配开始,逐步深入到回溯引用、条件性求值以及前后查找等高级特性,使得读者能够系统、全面地掌握正则...
3. **语法提示**:提供正则表达式语法的详细提示和参考,帮助用户理解和学习正则表达式中的各种符号和结构,如点号(.)、星号(*)、加号(+)、问号(?)、括号(())、管道符(|)等。 4. **测试集**:允许用户...
Tcl/tk 宝典之二 - 正则表达式参考 本资源是 Tcl/tk 进阶资料,主要讲解正则表达式的概念和使用方法,通过作者的实践经验和实例讲解,非常易于理解和应用于实际开发中。 知识点一:正则表达式的历史和应用 * 正则...
正则表达式整理汇总,含以下内容 [1]里面在包括一个正则表达式测试小程序 RegexTester.exe [2]正则表达式30分钟入门教程.pdf] [3]正则表达式规则.doc [4]正则表达式30分钟入门教程.mht 自己整理用的,现在...
### 正则表达式基础知识与...对于想要深入学习并掌握正则表达式技术的读者来说,本书无疑是一个非常有价值的参考资料。通过阅读本书,读者不仅可以学到理论知识,还能通过实践案例加深理解,提高解决实际问题的能力。
3. **经典例程**:内建了各种经典的正则表达式示例,方便学习和参考,有助于开发者快速掌握正则表达式的常见用法。 4. **跨平台**:虽然题目并未明确指出该工具的具体跨平台特性,但通常这意味着它可以在不同的操作...
6. **教程和文档**:提供详细的正则表达式使用指南和C# API参考,帮助用户学习和理解正则表达式。 7. **版本控制**:保存和加载正则表达式模式,便于项目管理。 8. **错误检查**:检测并提示正则表达式中的语法...
书中的例子涵盖了多种编程语言,如Perl、Java、JavaScript、.NET等,这些语言的正则表达式引擎虽然大同小异,但在细节上有所区别,学习者将了解到如何在不同环境下应用正则表达式。 对于初学者,书中会引导他们理解...
正则表达式(Regular ...对于想要在C语言项目中集成正则表达式功能的开发者来说,这是一个宝贵的参考资料。通过学习和使用这些文件,你可以掌握如何利用正则表达式进行复杂的文本处理任务,提升你的C语言编程能力。
为了进一步学习,可以查阅Python官方文档的`re`模块,以及各种正则表达式在线教程和练习网站。 通过这个简短的教程,你应该对Python中的正则表达式有了初步的了解。继续实践和探索,将有助于你更好地掌握这一强大...
学习C#中的正则表达式,意味着学习如何使用System.Text.RegularExpressions命名空间下的Regex类。这个类是.NET中用于执行正则表达式操作的核心,它让.NET开发人员能够利用正则表达式语言的强大功能来实现复杂的模式...
6. 学习资源:提供正则表达式的基础教程和参考手册,方便用户学习和查阅。 在实际应用中,正则表达式生成工具可以极大地简化开发过程,避免手动编写和调试正则表达式带来的困扰。无论是新手还是经验丰富的开发者,...
2. RegExr (iOS App):适用于移动设备的正则表达式学习工具。 3. Expresso:一款强大的正则表达式设计和测试工具,特别适合.NET开发人员。 五、学习资源 1. "Mastering Regular Expressions" by Jeffrey E.F. ...
### 二、正则表达式学习资源推荐 #### 2.1 deerchao的《正则表达式30分钟入门教程》 此教程由deerchao编写,采用了类似于微软帮助文档的格式,非常专业且易于理解。教程内容丰富,不仅适合初学者快速入门,也适合有...
5. **学习资源**:为了帮助用户深入理解正则式,工具可能还包含教程、参考资料和常见正则表达式模式库,方便用户随时查阅。 RegexBuddy.exe 是一个典型的正则表达式工具,它提供了上述功能,并且可能有以下特点: ...
6. **学习资源**:内置正则表达式语法参考,方便用户查阅和学习。 7. **代码生成**:部分工具能生成对应编程语言的代码片段,方便将调试好的正则表达式应用到实际项目中。 在提供的压缩包文件中,我们看到几个...