正则表达式基础

一:高度概括:

1,元字符;

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

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

\s匹配任意的空白符

\d匹配数字

\b匹配单词的开始或结束

^匹配字符串的开始

$匹配字符串的结束

2,出现次数限制

*重复零次或更多次

+重复一次或更多次

?重复零次或一次

{n}重复n次

{n,}重复n次或更多次

{n,m}重复n到m次

3,字符处理

[aeiou]就匹配任何一个英文元音字母,[.?!]匹配标点符号(.或?或!)

[0-9]代表的含意与\d就是完全一致的:一位数字

[a-z0-9A-Z_]也完全等同于\w(如果只考虑英文的话)。

二:分解讲解

元字符:

1,\b(b代表是break)

代表着单词的开头或结尾,也就是单词的分界处。

如果需要更精确的说法,\b匹配这样的位置:它的前一个字符和后一个字符不全是(一个是,一个不是或不存在)\w。

\\bhi\\b.*\\bLucy\\b(java中)匹配hichenchaoyangLucy

2,.表示任意字符(换行符\n除外)

.*连在一起就意味着任意数量的不包含换行的字符

3,\d(digit数字的意思,表示一个0到9的字符)

0\\d\\d-\\d\\d\\d\\d\\d\\d\\d\\d匹配023-51256895

以0开头,然后是两个数字,然后是一个连字号“-”,最后是8个数字

另一种写法:0\\d{2}-\\d{8}

4,表示前一个表达式字符出现的数量

*重复零次或更多次

+重复一次或更多次

?重复零次或一次

{n}重复n次

{n,}重复n次或更多次

{n,m}重复n到m次

5\s(space意思)

匹配任意的空白符

6^

匹配字符串的开始

7$

匹配字符串的结束

元字符^(和数字6在同一个键位上的符号)和$都匹配一个位置,这和\b有点类似。

^匹配你要用来查找的字符串的开头,$匹配结尾。这两个代码在验证输入的内容时非常有用,

比如一个网站如果要求你填写的QQ号必须为5位到12位数字时,可以使用:^\d{5,12}$。

这里的{5,12}和前面介绍过的{2}是类似的,只不过{2}匹配只能不多不少重复2次,

{5,12}则是重复的次数不能少于5次,不能多于12次,否则都不匹配。

三:分支条件

\d{5}-\d{4}|\d{5}这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字。

之所以要给出这个例子是因为它能说明一个问题:使用分枝条件时,要注意各个条件的顺序。如果你把它改成\d{5}|\d{5}-\d{4}的话,

那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配分枝条件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,

就不会去再管其它的条件了。

四:分组

我们已经提到了怎么重复单个字符(直接在字符后面加上限定符就行了);但如果想要重复多个字符又该怎么办?你可以用小括号来指定子表达式(也叫做分组)

(\d{1,3}\.){3}\d{1,3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:\d{1,3}匹配1到3位的数字,(\d{1,3}\.){3}匹配三位数字加上一个英文句号

(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})。

正确的ip地址正则表达式

((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

五:反义

代码/语法说明

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

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

\D匹配任意非数字的字符

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

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

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

例子:

\S+匹配不包含空白符的字符串。

<a[^>]+>匹配用尖括号括起来的以a开头的字符串。

三:负责正则表达式解析

\(?0\d{2}[)-]?\d{8}

这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。

我们对它进行一些分析吧:首先是一个转义字符\(,它能出现0次或1次(?),然后是一个0,

后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。

相关推荐