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 ) ) 返回值=1
preg_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.qtw
preg_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:多行匹配;(似乎没什么用处)