PHP正则表达式

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:多行匹配;(似乎没什么用处)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值