文档介绍:该【第12章正则表达式 】是由【1875892****】上传分享,文档一共【25】页,该文档可以免费在线阅读,需要了解更多关于【第12章正则表达式 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。 正则表达式及其相关类
正则表达式能用最简单的方式实现非常复杂的字符串处理任务,在信息检索和信息过滤等实际应用中,正则表达式起着非常重要的作用。
正则表达式提供了灵活高效的处理文本字符串的方法。正则表达式的全面模式匹配表示法使程序员可以快速分析大量文本以找到特定的字符模式;提取、编辑、替换或删除文本子字符串;也可以将提取的字符串添加到集合中。
对于处理字符串的许多应用程序而言,正则表达式是不可缺少的工具。
正则表达式简介
正则表达式:
用某种模式去匹配指定字符串的一种表示方式。
正则表达式由普通字符和元字符组成。普通字符:如字母、数字、汉字等。元字符:可以匹配某些字符形式的具有特殊含义的字符,其作用类似于DOS命令使用的通配符。
正则表达式简介(续)
1. 正则表达式基本书写符号
符号
含义
示例
解释
匹配输入
\
转义符
\*
符号“*”
*
[ ]
可接收的字符列表
[efgh]
e、f、g、h中的任意1个字符
e、f、g、h
[^ ]
不接收的字符列表
[^abc]
除a、b、c之外的任意1个字符,包括汉字、数字和特殊符号
m、q、5、*
|
匹配“|”之前或之后的表达式
ab|cd
ab或者cd
ab、cd
( )
将子表达式分组
(abc)
将字符串abc作为一组
abc
-
连字符
A-Z
任意单个大写英文字母
大写字母
正则表达式简介(续)
限定符将可选数量的数据添加到正则表达式,下表为常用限定符:
符号
含义
示例
解释
匹配输入
不匹配输入
*
指定字符重复0次或n次
(abc)*
仅包含任意个abc的字符串
abc、abcabcabc
a、abca
+
指定字符重复1次或n次
m+(abc)*
以至少1个m开头,后接任意个abc的字符串
m、mabc、mabcabc
ma、abc
?
指定字符重复0次或1次
m+abc?
以至少1个m开头,后接ab或abc的字符串
mab、mabc、mmmab、mmabc
ab、abc、mabcc
{n}
只能输入n个字符
[abcd]{3}
由abcd中字母组成的任意长度为3的字符串
abc、dbc、adc
a、aa、dcbd
正则表达式简介(续)
符号
含义
示例
解释
匹配输入
不匹配输入
{n,}
指定至少 n 个匹配
[abcd]{3,}
由abcd中字母组成的任意长度不小于3的字符串
aab、dbc、aaabdc
a、cd、bb
{n,m}
指定至少 n 个但不多于 m 个匹配
[abcd]{3,5}
由abcd中字母组成的任意长度不小于3,不大于5的字符串
abc、abcd、aaaaa、bcdab
ab、ababab、a
^
指定起始字符
^[0-9]+[a-z]*
以至少1个数字开头,后接任意个小写字母的字符串
123、6aa、555edf
abc、aaa、a33
$
指定结束字符
^[0-9]\-[a-z]+$
以1个数字开头后接连字符“–”,并以至少1个小写字母结尾的字符串
2-a、3-ddd、5-efg
33a、8-、7-Ab
正则表达式简介(续)
3. 匹配字符集
(1) 匹配字符集是预定义的用于正则表达式中的符号集。
(2) 如果字符串与字符集中的任何一个字符相匹配,它就会找到这个匹配项。
正则表达式简介(续)
符号
含义
示例
解释
匹配输入
不匹配输入
.
匹配除 \n 以外的任何字符
a..b
以a开头,b结尾,中间包括2个任意字符的长度为4的字符串
aaab、aefb、a35b、a#*b
ab、aaaa、a347b
\d
匹配单个数字字符,相当于[0-9]
\d{3}(\d)?
包含3个或4个数字的字符串
123、9876
12、01023
\D
匹配单个非数字字符,相当于[^0-9]
\D(\d)*
以单个非数字字符开头,后接任意个数字字符串
a、A342
aa、AA78、1234
\w
匹配单个数字、大小写字母和汉字字符
\d{3}\w{4}
以3个数字字符开头的长度为7的字符串
234abcd、12345Pe
58a、Ra46
\W
匹配单个除汉字、字母、数字以外的其他字符
\W+\d{2}
以至少1个非数字、字母和汉字的字符开头,2个数字字符结尾的字符串
#29、#?***@10
23、#?***@100
正则表达式中的部分匹配字符集
正则表达式简介(续)
4. 分组构造(了解)
分组构造
说明
( )
非命名捕获。捕获匹配的子字符串(或非捕获组)。编号为零的第一个捕获是由整个正则表达式模式匹配的文本,其它捕获结果则根据左括号的顺序从1开始自动编号。
(?<name>)
命名捕获。将匹配的子字符串捕获到一个组名称或编号名称中。也可以用单引号替代尖括号,例如 (?'name')
常用分组构造形式
例子:((?<One>abc)/d+)?(?<Two>xyz)(.*)
正则表达式简介(续)
4. 分组构造(了解)
不论是非命名捕获还是命名捕获,都是根据左括号从左到右按顺序编号,而且编号为0的第一个捕获结果总是指全部匹配的结果。如果在正则表达式中既有命名捕获又有非命名捕获,则先处理所有非命名捕获,并对其进行编号,处理完成后,再重新从左到右开始处理命名捕获,但是组的编号仍继续增加。
例子:对于模式((?<One>abc)/d+)?(?<Two>xyz)(.*)分析产生的捕获组
正则表达式简介(续)
5. 正则表达式举例
(1)至少1个字符:.{1,}
(2)3个“.”句点符号:\.{3}
(3)括号括起来的2~3个数字构成的字符串:\([0-9]{2,3}\) 其中的反斜杠“\”表示转义。
(4)必须包含“ab”的字符串:.{0,}ab.{0,}
(5)以字母开头,允许包含字母、数字及下划线,长度为5~16:[a-zA-Z][a-zA-Z0-9_ ] {5,16}
(6)国内电话号码:(0\d{2}-)\d{8}|(0\d{3}-)\d{7}
(7)至少3个汉字:[\u4e00-\u9fa5]{3,}