一、与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()函数