正则表达式

定义

描述字符串结构模式的形式化表达手法。

 

用途

字符串处理,查找、匹配、替换和验证特定字符串。

 

元字符

匹配一个位置(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,}? 尽可能少地使用重复但至少使用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

 

分组

反向引用

零宽度断言

负向零宽度断言

匹配选项

注释

优先级顺序

递规匹配


转载于:https://my.oschina.net/hnuweiwei/blog/299568

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值