正则表达式
定义: 描述字符串结构模式的形式化表达手法。 用途: 字符串处理,查找、匹配、替换和验证特定字符串。 元字符: 匹配一个位置(3个,^ $ /b)或一个字符串中的字符(7个,. /w /W /s /S /d /D) 匹配位置的元字符:^和/b(匹配单词的开始或结尾,即单词的分界处) .(点号)匹配除换行符之外的任意字符, /w匹配单词字符(包括字母,数字,下划线,汉字)/W匹配任意非单词字符,/s匹配任意空字符(空格,制表符,换行符,中文全角空格)/S匹配任意非空字符,/d匹配任意的数字字符/D匹配任意的非数字字符 字符 说明 ^ 匹配行的开始位置。 $ 匹配行的结束位置。 /b 匹配单词的开始或结束位置。 . 匹配除换行符号之外的任意字符。 /w 匹配单词字符(包括字母、数字、下划线和汉字)。 /W 匹配任意的非单词字符(包括字母、数字、下划线和汉字)。 /s 匹配任意的空白字符,如空格、制表符、换行符、中文全角空格等。 /S 匹配任意的非空白字符。 /d 匹配任意的数字(0-9)。 /D 匹配任意的非数字字符。 ^String 匹配以“String”开头的行 String$ 匹配以“String”结尾的行 ^String$ 匹配一个只包含字符串“String”的行 ^$ 匹配一个空行 /bStr 匹配的字符串必须“Str”开头,且“Str”之前是单词的分界处 ing/b 匹配以“ing”结尾的字符串 /bString/b 匹配一个完整的单词“String” 字符类: 通常情况下,如果要匹配数字、字母、空白等字符时,可以直接使用与这些集合相对应的元字符。如果要匹配的字符集合(如集合[0,1,2,3,4,5])没有与之相对应的元字符时,则需要自定义匹配的字符集合。 正则表达式引入了连接符“-”定义字符的范围 若字符“^”是字符类的第一个字符,则表示否定该字符类,即匹配除了该字符类之外的任意字符 在字符类中使用元字符时,不需要使用转义操作 [aeiou] 匹配字符集合中的任何字符。 [^aeiou] 匹配除字符集合中的之外的字符。 [0-9a-zA-Z_] 匹配任何数字、字母(大写字母和小写字母)和下划线,等同于/w [^0-9a-zA-Z_] 匹配除任何数字、字母、下划线之外的任何字符,等同于/W。 /p{name} 匹配{name}指定的命名字符类中的任何字符。 /P{name} 匹配除{name}指定的命名字符类中之外的任何字符。 字符转义: 正则表达式定义了一些特殊的元字符,如^、$、.等表达指定的意义,如果需要匹配这些字符本身,则需要使用字符转义来取消这些字符的特殊含义。转义字符为“/”(反斜杠),除了.、$、^、{、[、(、|、)、*、+、?、/之外的字符不需要进行转义,它们都表示字符本身 /. 匹配. /* 匹配* // 匹配/ 其他常用字符转义 字符或表达式 说明 /a 响铃(警报)/u0007。 /b 在正则表达式中,表示单词的边界;如果在字符类中,则表示退格符/u0008。 /t 制表符符/u0009。 /r 回车符/u000D。 /v 垂直制表符/u000B。 /f 换页符/u000C。 /n 换行符/u000A。 /e 回退(Esc)符/u001B。 /040 将ASCII字符匹配为八进制数(最多三位)。 /x20 使用十六进制表示形式与ASCII字符匹配。 /cC ASCII控制字符,如Ctrl-C。 /u0020 使用十六进制表示形式(恰好四位)与Unicode字符匹配。 反义: 匹配不在特定范围的字符串时需要用到反义,反义表达式有元字符和自定义的用^开头的两种。 常用的反义表达式 字符或表达式 说明 /W 匹配任意的非单词字符(包括字母、数字、下划线和汉字)。 /S 匹配任意的非空白字符。 /D 匹配任意的非数字字符。 /B 匹配不是单词开头和结束的任何位置。 [^a] 匹配除字符a之外的任何字符。 [^aeiou] 匹配除字符集合(aeiou)中的之外的任何字符。 限定符: 正则表达式的元字符一般只能匹配一个字符,如果要匹配0个或1个或多个字符或者未知字符,需要用到限定符。限定符的作用就是制定特定字符或字符集重复出现的次数。 限定符说明表 字符或表达式 说明 {n} 重复n次。 {n,} 重复至少n次。 {n,m} 重复至少n次,最多m次。 * 重复至少0次,等同于{0,}。 + 重复至少1次,等同于{1,}。 ? 重复0次或1次,等同于{0,1}。 *? 尽可能少地使用重复的第一个匹配。 +? 尽可能少地使用重复但至少使用一次。 ?? 使用零次重复(如有可能)或一次重复。 {n}? 等同于{n}。 {n,}? 尽可能少地使用重复但至少使用n次。 {n,m}? 介于n次和m次之间、尽可能少地使用重复。 /bname/d+/b 匹配以字符串“name”开头的、以数字字符串结尾的字符串。其中,表达式/d+可以匹配长度至少为1的数字字符串 /d{3} 和正则表达式/d/d/d等价,匹配3位整数 /d{3,} 匹配3位以上(包括3位)的整数 /d{3,4} 式匹配3位或4位的整数 在限定符*、+、?、{n}、{n,}和{n,m}之后再添加一个字符“?”,则表示尽可能少的重复字符“?”之前的限定符号的重复次数,这种方式匹配被称为懒惰匹配 常用的懒惰限定符 字符或表达式 说明 *? 尽可能少地使用重复的第一个匹配。 +? 尽可能少地使用重复但至少使用一次。 ?? 使用零次重复(如有可能)或一次重复。 {n}? 等同于{n}。 {n,m}? 介于n次和m次之间、尽可能少地使用重复。 a.*b 匹配以字母a开头的、以字母b结束的、最长的字符串。此时,这是一种贪婪匹配 a.*?b 匹配以字母a开头的、以字母b结束的、最短的字符串。此时,这是一种懒惰匹配 a.{1,}b 匹配以字母a开头的、以字母b结束的、长度至少为3的字符串 a.{1,}?b 字母a和字母b之间的字符串实际上只重复了1次。如果将正则表达式a.{1,}b应用于字符串“avbab”,则匹配字符串“avbab”。如果将正则表达式a.{1,}?b应用于字符串“avbab”,则匹配字符串“avb”,而不会匹配字符串“avbab” 替换: 最简单的替换使用字符“|”表示,它表示如果某一个字符串匹配了正则表达式中的字符“|”的左边或者右边的规则,那么该字符串也匹配了该正则表达式。首先匹配|字符的左侧部分,当左侧部分不匹配时,它才尝试匹配|字符的右侧部分。 0/d{2}-/d{8}|0/d{3}-/d{7}|0/d{3}-/d{8} 匹配了当前国内部分地区的3种固定电话号码:一种是号码的前4位为区号,后7位为本地号码;另一种是号码的前3位为区号,后8位为本地号码;最后一种是号码的前4位为区号,后8位为本地号码。 Jack|jack 等同于[Jj]ack 或 Jack|jack 分组 反向引用 零宽度断言 负向零宽度断言 匹配选项 注释 优先级顺序 递规匹配 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |