PHP正则表达式

来源:互联网 发布:淘宝黑了 编辑:程序博客网 时间:2024/05/21 08:04

1.preg_match与preg_match_all

preg_match与preg_match_all这两个函数算是一组,这两个函数的不同点是preg_match只匹配第一次,而preg_match_all则匹配所有。

int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

string $pattern:要搜索的样式;

string $subject:要搜索的目标;

array $matches:存放搜索结果;

int $offset:开始搜索的位置;

int $flags:标记值。

返回值:这两个函数的返回值都是匹配的次数,不同的是preg_match的返回值只为0或1,如果出现错误则都是返回false。

代码段1:<?php$pattern = '/[0-9]/';$pattern1 = '/[a-z]/';$subject = 'today20lk_$%9coo@bbs.qtw';$match = $match1 = array();$ret = preg_match($pattern,$subject,$match);echo "preg_match函数检索到的第1个数字";echo "<pre>";print_r($match);echo "</pre>";echo "<b>返回值=$ret</b>";echo "<br/>-----------------------------------<br/>";$ret1 = preg_match($pattern1, $subject,$match1);echo "preg_match函数检索到的第1个字母";echo "<pre>";print_r($match1);echo "</pre>";echo "<b>返回值=$ret1</b>";<pre name="code" class="html">代码段1输出:preg_match函数检索到的第1个数字Array(    [0] => 2)返回值=1-----------------------------------preg_match函数检索到的第1个字母Array(    [0] => t)返回值=1

如代码段1所示,preg_match函数在匹配到第1个匹配的字符后就停止运行,所以它的返回值只有0和1,0代表没有匹配,1代表匹配到了,错误则返回false。

preg_match_all函数会检索出subject中所有的匹配的值,它的返回值是匹配到的次数,错误则返回false。

代码段2:<?php$pattern = '/[0-9]{2}/';$pattern1 = '/[a-z]{3}/';$subject = 'today20lk_$%9coo@bbs.qtw';$match = $match1 = array();$ret = preg_match_all($pattern,$subject,$match);echo "preg_match_all函数匹配连续2个数字的结果";print_r($match);echo "返回值=$ret<br/>";$ret1 = preg_match_all($pattern1, $subject,$match1);echo "preg_match_all函数匹配连续3个字母的结果";print_r($match1);echo "返回值=$ret1";代码段2输出:<pre name="code" class="html">preg_match_all函数匹配连续2个数字的结果Array ( [0] => Array ( [0] => 20 ) ) 返回值=1preg_match_all函数匹配连续3个字母的结果Array ( [0] => Array ( [0] => tod [1] => coo [2] => bbs [3] => qtw ) ) 返回值=4

2.preg_replace与preg_filter

preg_replace与preg_filter函数的功能都是进行一个正则表达式的搜索和替换,不同点在于preg_replace返回所有值,而preg_filter只返回匹配的值。

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )mixed preg_filter ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

mixed $pattern:搜索的模式;

mixed $replacement:替换的信息;

mixed $subject:要搜索的字符串或数组;

int $limit:每个模式在subject上进行替换的最大次数。-1表示无限。

int $count:完整的替换次数。

返回值:如果subject是一个数组,则返回值为一个数组,其它情况返回值为字符串。发生错误则返回NULL。

代码段3:<?php/* * preg_replace与preg_filter */$subject = 'today20lk_$%9coo@bbs.qtw';$pattern = '/[a-z]{4}/';$replace = '小丸子';$ret1 = $ret2 = array();$ret = preg_replace($pattern,$replace,$subject);echo $ret;$ret = preg_filter($pattern,$replace,$subject);echo "<br/>$ret<br/>";$subject1 = array('apple','orange','02589','tomato','coffee');$pattern1 = '/(a|o)/';$replace1 = '啊';$ret1 = preg_filter($pattern1,$replace1,$subject1);echo 'preg_filter函数的返回输出<br/>';print_r($ret1);$ret2 = preg_replace($pattern1,$replace1,$subject1);echo '<br/>preg_replace函数的返回输出<br/>';print_r($ret2);代码段3输出: <pre name="code" class="html">小丸子y20lk_$%9coo@bbs.qtw小丸子y20lk_$%9coo@bbs.qtwpreg_filter函数的返回输出Array ( [0] => 啊pple [1] => 啊r啊nge [3] => t啊m啊t啊 [4] => c啊ffee ) preg_replace函数的返回输出Array ( [0] => 啊pple [1] => 啊r啊nge [2] => 02589 [3] => t啊m啊t啊 [4] => c啊ffee )
在subject分别为字符串与数组的情况下,preg_filter与preg_replace的返回是有不同的。当subject为字符串的情况时,两个函数返回的都是替换之后的字符串;当subject是数组形式时,preg_replace返回所有替换和没替换的数组元素,而preg_filter只返回替换了的数组元素。

3、其它

array preg_grep ( string $pattern , array $input [, int $flags = 0 ] )array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )
string preg_quote ( string $str [, string $delimiter = NULL ] )

preg_split函数的功能是分割字符串,与explode功能类似;

preg_grep函数的功能是返回匹配模式的数组条目;

preg_quote函数的功能是转义正则表达式字符。


4、参考

( ):标记一个子表达式的开始和结束位置。子表达式可获取。

{n}:匹配确定的n次;

{n,}:至少匹配n次,n是一个非负整数;

{n,m}:至少匹配n次,至多匹配m次,n和m都是一个非负整数;

.:匹配除\n外的任何单个字符;

*:匹配前面的字符0次或多次,等价于{0,};

?:匹配前面的字符0次或1次,等价于{0,1};

+:匹配前面的字符1次或多次,等价于{1,};

\b:匹配一个单调边界,如要匹配某个单词,可用\bword\b;

\B:匹配非单词边界;

\s:匹配任何空白字符,包括空格、制表符等,等价于[\f\n\r\t\v];

\S:匹配任何非空白字符,等价于[^\f\n\r\t\v];

\d:匹配一个数字,等价于[0-9];

\D:匹配一个非数字,等价于[^0-9];

\w:匹配包括下划线的任何单词字符,等价于[A-Za-z0-9_];

\W:匹配任何非单词字符,等价于[^A-Za-z0-9_];

[abc]:a,b 或 c;

[^abc]:除了a,b和c之外的其它;

[a-zA-z0-9]:小写字母,大写字母,数字0-9;

^:起始位;

$:结束位;

x|y:匹配x或y;


5、修正符

i:忽略字母大小写;

s:使用s修正符后,“.”匹配所有字符,也包括换行符;

A:强制从字符串的开头开始进行匹配;(似乎没什么用处)

x:忽略正则表达式中的空白;

U:不重复匹配;

m:多行匹配;(似乎没什么用处)




0 0
原创粉丝点击