一、与Perl语言兼容的正则表达式处理函数
函数名 | 功能描述 |
preg_match() | 进行正则表达式匹配 |
preg_match_all() | 进行全局正则表达式匹配 |
preg_replace() | 进行正则表达式的搜索和替换 |
preg_split() | 用正则表达式分割字符串 |
preg_grep() | 返回与模式匹配的数组单元 |
preg_replace_callback() | 用回调函数执行正则表达式的搜索和替换 |
二、正则表达式的语法规则
正则表达式描述了一种字符串匹配的模式,通过这个模式在特定的函数中对字符串进行匹配、查找、替换及分割等操作。正则表达式作为一个匹配的模板,是由原子(普通字符,例如字符a到z)、有特殊功能的字符(称为元字符,例如*、+和?等),以及模式修正符三部分组成的文字模式。一个表单密码的正则表达式模式如下所示:
$zzpassword='/[a-z,A-Z,0-9,\m]{6,12}/';
1、定界符
在程序语言中,使用与Perl兼容的正则表达式,通常都需要将模式表达式放入定界符之间。作为定界的字符也不仅仅局限于使用斜线“/”。除了字母、数字和反斜线“\”以外的任何字符都可以作为定界符号,例如# ! {} |等都是可以的。通常习惯将模式表达式包含在两个斜线/之间。
2、原子
原子是正则表达式的最基本的组成单位,而且在每个模式中最少要包含一个原子。
(1)普通字符作为原子
普通字符是编写正则表达式时最常见的原子了,包括所有的大写和小写字母字符、所有数字等。例如a-z、A-Z、0-9.
(2)一些特殊字符和元字符作为原子
任何一个符号都可以作为原子使用,但如果这个符号在正则表达式中有一些特殊意义,我们就必须使用转义字符“\”取消它的特殊意义,将其变成一个普通的原子。例如,所有的标点符号以及一些其他的符号,双引号、单引号、* + .等,如果当原子,就必须像这样\" \' \* \+ \.这样使用。
(3)一些非打印字符作为原子
所谓的非打印字符,是一些在字符串中的格式控制符号,例如空格、回车及制表符号等。
正则表达式中常用的非打印字符
原子字符 | 含义描述 |
\cx | 匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一,否则,将c视为一个原义的c字符 |
\f | 匹配一个换页符。等价于\xOc和\cL |
\n | 匹配一个换行符。等价于\xOa和\cJ |
\r | 匹配一个回车符。等价于\xOd和\cM |
\t | 匹配一个制表符。等价于\xO9和\cI |
\v | 匹配一个垂直制表符。等价于\xOb和\cK |
'/\n/' //在Windows系统中用于匹配字符串中是否有回车换行出现
'/\r\n/' //在Linux系统中用于匹配字符串中是否有回车换行出现
3、元字符
利用Perl正则表达式还可以做另一件有用的事,就是使用各种元字符来搜索匹配。所谓元字符就是构建正则表达式的具有特殊含义的字符,如* + ?等。在一个正则表达式中,元字符不能单独出现,它必须是用来修饰原子的。如果要在正则表达式中包含元字符本身,使其失去特殊的含义,则必须在其前面加上\进行转义。
正则表达式的元字符
元字符 | 含义描述 |
* | 匹配0次、1次或多次其前的原子 |
+ | 匹配1次或多次其前的原子 |
? | 匹配0次、或1次其前的原子 |
. | 匹配除了换行符外的任意一个字符 |
| | 匹配两个或多个分支选择 |
{n} | 表示其前面的原子恰好出现n次 |
{n,} | 表示其前面的原子出现不少于n次 |
{n.m} | 表示其前面的原子至少出现n次,最多出现m次 |
^或\A | 匹配输入字符串的开始位置(或在多行模式下行的开头,即紧随一换行符之后) |
$或\Z | 匹配输入字符串的结束位置(或在多行模式下行的开头,即紧随一换行符之前) |
\b | 匹配单词的边界 |
\B | 匹配除单词边界以外的部分 |
[] | 匹配方括号中指定的任意一个原子 |
[^] | 匹配除方括号中的原子以外的任意一个原子 |
O | 匹配其整体为一个原子,即模式单元,可以理解为由多个单个原子组成的大原子 |
4、模式修正符
模式修正符在正则表达式定界符之外使用(最后一个斜线/之后)。
模式修正符号
模式修正符号 | |
i | 在和模式进行匹配时不区分大小写 |
m | 将字符串视为多行。默认的正则表达式开始^和结束$将目标字符串作为单一的一“行”字符(甚至其中包含有换行符也是如此)。如果在修正符中加上“m”,那么开始和结束将会指字符串的每一行,每一行的开头就是^,结束就是$ |
s | 如果设定了次修正符,模式中的圆点元字符“.”匹配所有的字符,包括换行符。即将字符串视为单行,换行符最为普通字符看待。 |
x | 模式中的空白忽略不计,除非它已经被转义 |
e | 只用在preg_replace()函数中,在替换字符串中对逆向引用做正常的替换,将其作为PHP代码求值,并用其结果来替换所搜索的字符串。 |
U | 本修正符反转了匹配数量的值使其不是默认的重复,而变成在后面跟上“?”才变得重复。这和Perl不兼容。也可已通过在模式之中设置修正符“U”后者在数量符之后跟一个问号来用此选项。 |
D | 模式中的美元元字符仅匹配目标字符串的结尾。没有此选项时,如果最后一个字符是换行符的话,美元符号也会匹配此字符之前。如果设定了m修正符则忽略此选项。 |
例如:模式“/Web Server/ix”可以用来匹配字符串“webServer”,忽略大小写和空白。
三、与Perl兼容的正则表达式函数
正则表达式不能单独使用,必须在相应的正则表达式函数中应用,才能实现对字符串的匹配、查找、替换及分割等操作。
1、字符串的匹配和查找
(1)preg_match()函数
该函数常用于表单验证
(2)preg_match_all()函数
(3)preg_grep()函数
2、字符串的替换
(1)preg_replace()函数
(1)str_replace()函数
3、字符串的分割和连接
(1)preg_split()函数
(1)explode()函数
(1)implode()函数