preg_match 与 preg_match_all区别和详细用法

正文实例陈述了PHP正则表明式管理函数。分享给我们供我们参谋,具体如下:

正则表明式在
PHP 中的应用在 PHP
应用中,正则说明式入眼用于:

有的时候在局地一定的业务场景中要求相配,或许提取部分器重的音讯,举个例子相称网页中的一些链接,

正则相配:依照正则表明式相称对应的开始和结果
正则替换:根据正则表明式合作内容并替换
正则分割:依据正则表明式分割字符串
在 PHP 中有两类正则表明式函数,一类是 Perl 宽容正则表明式函数,一类是
POSIX 扩展正则表明式函数。二者差别比极小,并且引入应用Perl
宽容正则表明式函数,由此

领到部分数据时,大概会用到正则相配。

下文都以以 Perl 包容正则表明式函数为例子表明。

上面介绍一下php中的一些常用的正则管理函数。

定界符Perl
宽容形式的正则表明式函数,其正则表达式要求写在定界符中。任何不是字母、数字或反斜线()的字符都得以当作定界符,平日大家应用
/ 作为定界符。具体

一、preg_replace($pattern,$replacement,$subject)

运用见上边包车型地铁例证。

实施多个正则说明式的探索和替换。

提示
即使正则表明式功用十二分有力,但假若用普通字符串管理函数能一气呵成的,就尽可能不要用正则表明式函数,因为正则表明式效用会低得多。关于家常便饭字符串处理函数,请参见《

"; $str = "12,34:56;784;35,67:897:65"; //要求将上面的:,;都换成空格 print_r(preg_replace;?>

PHP 字符串管理》。

12 34 56 784 35 67 897 65

preg_match()preg_match()函数用于开展正则表明式相称,成功再次来到 1 ,不然重回 0 。

二、preg_match($pattern,$subject,&$matches)

语法:

"; $str = "团购商品"; //匹配出链接地址 preg_match\">.*?/",$str,$res); print_r;?>

int preg_match( string pattern, string subject [, array matches ]
卡塔尔国参数表达: 参数 表明
pattern 正则表达式
subject 必要合营检索的靶子
matches 可选,存储匹配结果的数组, $matches[0]
将包含与总人体模型式相称的文本,$matches[1]
将含有与第贰个捕获的括号中的子格局所相称的文本,以此类推

Array( [0] => 团购商品 [1] => )

例子 1 :

三、preg_match_all($pattern,$subject,&$matches)

 代码如下

施行一个大局正则表明式相称

<?php
if(preg_match(“/php/i”, “PHP is the web scripting language of choice.”,
$matches)){
    print “A match was found:”. $matches[0];
} else {
    print “A match was not found.”;
}
?>

"; $str=<< 首页 GSM手机 双模手机 手机配件 EOF; //使用全局正则匹配 preg_match_all\">/s",$str,$res); print_r;?>

浏览器输出:

Array( [0] => Array ( [0] => 首页 [1] => GSM手机 [2]
=> 双模手提式有线电话机 [3] => 手提式有线电话机装配零器件 卡塔尔 [1] => Array ( [0] =>
[1] =>
[2] =>
[3] =>
) [2] => Array (
[0] => 首页 [1] => GSM手机 [2] => 双模手提式有线电话机 [3] =>
手提式有线电话机装配零部件 卡塔尔(قطر‎State of Qatar

A match was found:

四、preg_split

经过二个正则表明式分隔字符串

<b>example: </b>, <div align=left>this is a
test</div>
example: , this is a test

"; $str = "12,34:56;784;35,67:897:65"; //分隔字符串 $arr = preg_split; print_r;?>

 代码如下

Array( [0] => 12 [1] => 34 [2] => 56 [3] => 784
[4] => 35 [5] => 67 [6] => 897 [7] => 65)

preg_match_all(“|<[^>]+>(.*)</[^>]+>|u”,
    “<b>example: </b><div align=”left”>this is a
test</div>”,
    $out, preg_set_order);
echo $out[0][0] . “, ” . $out[0][1] . “n”;
echo $out[1][0] . “, ” . $out[1][1] . “n”;

五、preg_quote

 

正则表明式特殊字符有:. \ + * ? [ ^ ] $ { } = ! < > : –

int preg_match ( string $pattern , string $subject [, array &$matches
[, int $flags [, int $offset ]]] )
找出核心的经常发布的点子授予合作

"; echo preg_quote;//在每个正则表达式语法的字符前增加一个反斜杠?>

 

六、子存储

 代码如下

"; //子存储使用 $date="[2012-08-09],[2012,09-19],[2011/08,09],[2012/10/09],[2013,08,01]"; //将上面字串中合法的日期匹配出来 preg_match_all[0-9]{2}\\1[0-9]{2}\]/",$date,$a); print_r;?>

$subject = “abcdefwww.111cn.net”;
$pattern = ‘/^def/’;
preg_match($pattern,
substr($subject,3), $matches,
preg_offset_capture);
print_r($matches);

Array( [0] => Array ( [0] => [2012-08-09] [1] =>
[2012/10/09] [2] => [2013,08,01] ) [1] => Array ( [0]
=> – [1] => / [2] => , ))

array
(
    [0] => array
        (
            [0] => def
            [1] => 0
        )

详细版请参见://www.jb51.net/article/160947.htm

)

PS:这里再为大家提供2款特别常有益的正则表明式工具供我们参照他事他说加以考查使用:

PHP在该例子中,由于使用了 i 矫正符,因而会不区分朗朗上口写去文本中相配 php

JavaScript正则表达式在线测量检验工具:

提示
preg_match(卡塔尔国第贰遍相称成功后就能甘休般配,假若要完结全部结实的合营,即寻觅到subject结尾处,则需采纳preg_match_all() 函数。

正则表明式在线生成工具:

事例 2 ,从一个 U翼虎L 中拿走主机域名 :

更加多关于PHP相关内容感兴趣的读者可查看本站专项论题:《php正则表达式用法计算》、《php程序设计安全课程》、《php安全过滤技艺总括》、《PHP数组操作本事大全》、《PHP基本语法入门教程》、《php字符串用法总计》及《php+mysql数据库操作入门教程》

 代码如下

意在本文所述对大家PHP程序设计拥有利于。

<?php
// 从 ULacrosseL 中收获主机名
preg_match(“/^(“,,
$matches);
$host = $matches[2];
// 从主机名中获得前边两段
preg_match(“/[^./]+.[^./]+$/”, $host, $matches);
echo “域名为:{$matches[0]}”;
?>

浏览器输出:

域名为:5idev.compreg_match_all()preg_match_all(卡塔尔函数用于实行正则表达式全局匹配,成功重回整个形式相称的次数(或者为零),假若出错再次来到FALSE 。

语法:

int preg_match_all( string pattern, string subject, array matches [,
int flags ] State of Qatar参数说明: 参数 表明
pattern 正则表达式
subject 需求相当检索的对象
matches 存款和储蓄相配结果的数组
flags 可选,钦命相配结果放入 matches 中的顺序,可供接纳的暗记有:

PREG_PATTERN_O牧马人DE卡宴:私下认可,对结果排序使 $matches[0]
为一人体模型式相配的数组,$matches[1]
为第三个括号中的子格局所匹配的字符串组成的数组,由此及彼
PREG_SET_O安德拉DEEvoque:对结果排序使 $matches[0]
为率先组相称项的数组,$matches[1] 为第二组相配项的数组,由此及彼
PREG_OFFSET_CAPTURE:假使设定本标志,对种种现身的相配结果也还要再次来到其专项的字符串偏移量
 

上边包车型地铁例证演示了将文件中兼有 <pre></pre>
标签内的重要性字(php)彰显为鲜红。

 代码如下

<?php
$str =
“<pre>学习php是一件快乐的事。</pre><pre>全数的phper须要协同努力!</pre>”;
$kw = “php”;
preg_match_all(‘/<pre>([sS]*?)</pre>/’,$str,$mat);
for($i=0;$i<count($mat[0]);$i++){
    $mat[0][$i] = $mat[1][$i];
    $mat[0][$i] = str_replace($kw, ‘<span
style=”color:#ff0000″>’.$kw.'</span>’, $mat[0][$i]);
    $str = str_replace($mat[1][$i], $mat[0][$i], $str);
}
echo $str;
新澳门萄京娱乐场,?>

正则相称中文汉字正则匹配汉语汉字依照页面编码分裂而略有区别:

GBK/GB2312编码:[x80-xff>]+ 或 [xa1-xff]+
UTF-8编码:[x{4e00}-x{9fa5}]+/u
例子:

 代码如下

<?php
$str = “学习php是一件开心的事。”;
preg_match_all(“/[x80-xff]+/”, $str, $match);
//UTF-8 使用:
//preg_match_all(“/[x{4e00}-x{9fa5}]+/u”, $str, $match);
print_r($match);
?>输出:

Array
(
    [0] => Array
        (
            [0] => 学习
            [1] => 是一件欢欣的事。
        )

)

发表评论

电子邮件地址不会被公开。 必填项已用*标注