目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。
正则表达式是用来匹配一类字符串的一种模式
正则表达式的功能:字符串的查找、替换以及分割
应用领域广泛
Perl、PHP、Java、C++、C#、Python、 Xpath、.Net、
JavaScript、Jscript
Oracle、Mysql、Unix、Linux
正则语法:
正则表达式主要组成:
1 原子(普通字符,如英文字符)
2 元字符(有特殊功用的字符)
3 模式修正字符(对正则表达式语义的修正)
一个正则表达式中至少包含一个原子。
===========华丽的分割线=======================
1 原子
原子是组成正则表达式的基本单位,在分析正则表达式时,应作为一个整体。
原子字符包括所有的英文字母、数字、标点符号以及其他一些符号。原子也包括以下内容。
单个字符、数字,如a~z,A~Z,0~9。
模式单元,如(ABC)可以理解为由多个原子组成的大的原子。
原子表,如 [ABC]。
重新使用的模式单元,如:\\1
普通转义字符,如:\d, \D, \w
转义元字符,如:\*,\.
2 元字符
元字符是用于构造规则表达式的具有特殊含义的字符。如果要在正则表达式中包含元字符本身,必须在其前加上”\”进行转义
元字符 说明
. 匹配除换行之外的任何一个字符
* 0次、1次或多次匹配其前的原子
+ 1次或多次匹配其前的原子
? 0次或1次匹配其前的原子
| 匹配两个或多个选择
^ 或 \A 匹配字符串串首的原子
$ 或 \Z 匹配字符串串尾的原子
\b 匹配单词的边界
\B 匹配除单词边界以外的部分
[] 匹配方括号中的任一原子
[^xyz] 匹配除方括号中的原子外的任何字符
{m} 表示其前原子恰好出现m次
{m,n} 表示其前原子至少出现m次,至少出现n次(n>m)
{m,} 表示其前原子出现不少于m次
() 整体表示一个原子
3 模式修正字符
在PCRE表达式中的最后一个分隔符/后,可以添加模式修正符,扩展了正则表达式在字符匹配、替换操作时的某些功能,修正增强了正则表达式的处理能力。模式修正符一般标记于整个模式之外,并且可以组合使用,如“/apple/i”、“/cat|dog/uis”等。
模式修正符 说明
i -可同时匹配大小写字母
s -将字符串视为单行,换行符做普通字符看待,使“.”匹配任何字符
m -将字符串视为多行
x -模式中的空白忽略不计
S - 当一个模式将被使用若干次时,先对其进行分析
U -匹配到最近的字符串
e -将替换的字符串作为表达使用
============================华丽分割线==========================
--------------------------------------------------------------------------------
\d 匹配一个数字;等价于[0-9]
\D 匹配除数字以外任何一个字符;等价于[^0-9]
\w 匹配一个英文字母、数字或下划线;等价于[0-9a-zA-Z_]
\W 匹配除英文字母、数字和下划线以外任何一个字符;等价于[^0-9a-zA-Z_]
\s 匹配一个空白字符;等价于[\f\n\r\t\v]
\S 匹配除空白字符以外任何一个字符;等价于[^\f\n\r\t\v]
\n 匹配一个换行符;等价于 \x0a 或 \cJ
\r 匹配一个回车符等价于\x0d 或 \cM
\t 匹配一个制表符;等价于 \x09\或\cl
\f 匹配一个换页符等价于 \x0c 或 \cL
\v 匹配一个垂直制表符;等价于\x0b或\ck
\oNN 匹配一个八进制数字
\xNN 匹配一个十六进制数字
\cC 匹配一个控制字符
例如,在字符串“Tom and Jerry chased each other in the house until tom’s uncel come in”中
元字符“^”或“\A” 置于字符串的开始确保模式匹配出现在字符串首端;
/^Tom/
元字符“$”或“\Z” 置于字符串的结束,确保模式匹配出现字符串尾端。
/in$/
如果不加边界限制元字符,将获得更多的匹配结果。
/^Tom$/精确匹配 /Tom/模糊匹配
例如:在字符串“This island is a beautiful land”中
元字符“\b”对单词的边界进行匹配;
/\bis\b/ 匹配单词“is”,不匹配“This”和“island”。
/\bis/ 匹配单词“is”和“island”中的“is”,不匹配“This”
元字符“\B”对除单词边界以外的部分进行匹配。
/\Bis\B/ 将明确的指示不与单词的左、右边界匹配,只匹配单词 的内部。所以在这个例子中没有结果。
/\Bis/ 匹配单词“This”中的“is”