正则表达式 字符-CarlZeng

1 常用的正则表达式元字符 . 匹配任意字符 * 修饰匹配符为0次任意次 ^ 匹配输入行的开始位置 $ 匹配输入行的结束位置 + 修饰匹配符至少1次 …

1 常用的正则表达式元字符

.

匹配任意字符

*

修饰匹配符为0次任意次

^

匹配输入行的开始位置

$

匹配输入行的结束位置

修饰匹配符至少1次

?

修饰匹配符0次或1次

[]

用来自定义匹配“多种字符”表达式

{}

修饰匹配次数的符号

“s

空格

“S

非“空格”字符

“d

匹配任何一个0-9数字

“D

匹配一个非0-9数字

“w

匹配一个 数字、字母或下划线

“W

匹配一个非 数字、字母和下划线

*?

非贪婪修饰匹配符为0次任意次

+?

非贪婪修饰匹配符至少一次

??

非贪婪修饰匹配符0次或1次

()

把一个表达式做为一个匹配整体

两边的表达式为“或”的关系

2 转义字符

在正则表达式中对一些特殊符号和特殊含义的字符的使用需要用“””进行转义操作,需要转义的字符除了包括以上列出的“元字符”外,还有以下这些具有具体含义的字符:

“t

横向制表符

“n

换行符

“r

回车符

“”

转义字符本身

3 修饰符

用在正则表达式结尾。例如 /asdf/i,“i”即为“修饰符”,意思是不区分大小写的匹配“asdf”。所有修饰符的含义如下表:

g

全局匹配

i

忽略大小写

m

多行匹配

s

把整个匹配串当作一行处理

x

允许注释和空格的出现

U

非贪婪匹配

-———————————————-

4.3 匹配多次

关于“匹配次数”的语法的使用有两种,一种是使用”{“};一种是{},但是无论如何含义都是一样的:

  • RE{N}:是精确的匹配RE N次
  • RE{N,}:会匹配RE N次或多于N次
  • RE{N,M}:会匹配RE在N次和M次之间
  • RE{,M}:匹配RE小于或等于M次

很多人对正则表达式不大了解,的确,一堆符号看起来乱七八糟,但正则表达式在我们的程序中或工作中无处不在,我更喜欢将正则表达式称做字符串匹配表达式。一大堆名词术语我不多讲,下面就一些实例来分析正则表达式:

1、电话号码匹配

中国的电话号码都是区号+号码组成,0开头,区号2到3位数,号码是7到8位数字。于是我们可以简单写成: 0”d{2,3}匹配区号,d{7,8}匹配号码。电话组合也分几种情况,区号-号码,区号空格号码,(区号)号码。要想完全匹配,我们可以写成: “(?0”d{2,3}[) -]?”d{7,8}
解释如下:”代表转义字符,因为要匹配(,于是需要将其转义,即”(匹配(。接着?代表(出现的次数是0次或1次。然后是区号,接着是)空格或者-出现1次或0次,然后接下来是7位号码或8位号码。
看到这里,可能大家肯定会发现这个表达式的不足,例如(01066666666、010)66666666也可以完全匹配,所以我们可以写成0”d{2,3}[ -]?”d{7,8}|”(0”d{2,3}[)]“d{7,8}
注意:这里|符号是或的意思。

2、数组字符传递匹配

假如一段字符串是:windows3ox4,50linux80,90,100 我们要做的工作是匹配数字3和4,5和80,90,100。那么如何书写正则表达式呢? 首先匹配数字,显然可以写成”d+,我们可以分析其他的几个是数字之间有,号,那么可以拆分一下:即开头由数字开始,接着是如数个“,数字”重复而成。所 以我们初略写成”d+[,”d+]+,即匹配无数个数字之间夹杂着,号,+代表重复1次或更多次,*代表重复0次或更多次,所以这里也可以写成”d+[, “d+]*,那么要想完全匹配,这里我们就只能加上“或”符号了。于是最终的可以写成”d+[,”d+]+|”d+

3、13”d{9}匹配13后面跟9个数字(中国的手机号)

4、<(“w+)> 查找尖括号括起来的字母或数字(即HTML/XML标签)

表1.常用的元字符

代码

说明

.

匹配除换行符以外的任意字符

“w

匹配字母或数字或下划线或汉字

“s

匹配任意的空白符

“d

匹配数字

“b

匹配单词的开始或结束

^

匹配字符串的开始

$

匹配字符串的结束

表2.常用的限定符

代码/语法

说明

*

重复零次或更多次

重复一次或更多次

?

重复零次或一次

{n}

重复n次

{n,}

重复n次或更多次

{n,m}

重复n到m次

表3.常用的反义代码

代码/语法

说明

“W

匹配任意不是字母,数字,下划线,汉字的字符

“S

匹配任意不是空白符的字符

“D

匹配任意非数字的字符

“B

匹配不是单词开头或结束的位置

[^x]

匹配除了x以外的任意字符

[^aeiou]

匹配除了aeiou这几个字母以外的任意字符