php小经验:解析preg_match与preg_match_all 函数


Posted in PHP onJune 29, 2013

正则表达式在 PHP 中的应用
在 PHP 应用中,正则表达式主要用于:
•正则匹配:根据正则表达式匹配相应的内容
•正则替换:根据正则表达式匹配内容并替换
•正则分割:根据正则表达式分割字符串
在 PHP 中有两类正则表达式函数,一类是 Perl 兼容正则表达式函数,一类是 POSIX 扩展正则表达式函数。二者差别不大,而且推荐使用Perl 兼容正则表达式函数,因此下文都是以 Perl 兼容正则表达式函数为例子说明。
定界符
Perl 兼容模式的正则表达式函数,其正则表达式需要写在定界符中。任何不是字母、数字或反斜线()的字符都可以作为定界符,通常我们使用 / 作为定界符。具体使用见下面的例子。
提示
尽管正则表达式功能非常强大,但如果用普通字符串处理函数能完成的,就尽量不要用正则表达式函数,因为正则表达式效率会低得多。关于普通字符串处理函数。
preg_match()
preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 。
语法:
int preg_match( string pattern, string subject [, array matches ] )
参数说明:

参数 说明
pattern 正则表达式
subject 需要匹配检索的对象
matches 可选,存储匹配结果的数组, $matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推
例子 1 :
<?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.";
}
?>

浏览器输出:
A match was found: PHP

在该例子中,由于使用了 i 修正符,因此会不区分大小写去文本中匹配 php 。
提示
preg_match() 第一次匹配成功后就会停止匹配,如果要实现全部结果的匹配,即搜索到subject结尾处,则需使用 preg_match_all() 函数。
例子 2 ,从一个 URL 中取得主机域名 :
<?php
// 从 URL 中取得主机名
preg_match("/^(http://)?([^/]+)/i","https://3water.com/index.html", $matches);
$host = $matches[2];
// 从主机名中取得后面两段
preg_match("/[^./]+.[^./]+$/", $host, $matches);
echo "域名为:{$matches[0]}";
?>

浏览器输出:
域名为:3water.com

preg_match_all()
preg_match_all() 函数用于进行正则表达式全局匹配,成功返回整个模式匹配的次数(可能为零),如果出错返回 FALSE 。
语法:
int preg_match_all( string pattern, string subject, array matches [, int flags ] )
参数说明:
参数 说明
pattern 正则表达式
subject 需要匹配检索的对象
matches 存储匹配结果的数组
flags 可选,指定匹配结果放入 matches 中的顺序,可供选择的标记有: PREG_PATTERN_ORDER:默认,对结果排序使 $matches[0] 为全部模式匹配的数组,$matches[1] 为第一个括号中的子模式所匹配的字符串组成的数组,以此类推 PREG_SET_ORDER:对结果排序使 $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] => 是一件快乐的事。
        ))
PHP 相关文章推荐
十天学会php之第九天
Oct 09 PHP
FCKeditor添加自定义按钮
Mar 27 PHP
在PHP中养成7个面向对象的好习惯
Jul 17 PHP
PHP类中Static方法效率测试代码
Oct 17 PHP
php中批量修改文件后缀名的函数代码
Oct 23 PHP
10条php编程小技巧
Jul 07 PHP
Zend Framework实现将session存储在memcache中的方法
Mar 22 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
Apr 07 PHP
一波PHP中cURL库的常见用法代码示例
May 06 PHP
php str_getcsv把字符串解析为数组的实现方法
Apr 05 PHP
PHP双向链表定义与用法示例
Jan 31 PHP
PHP实现简单的计算器
Aug 28 PHP
解析php session_set_save_handler 函数的用法(mysql)
Jun 29 #PHP
使用PHP获取当前url路径的函数以及服务器变量
Jun 29 #PHP
如何使用PHP实现javascript的escape和unescape函数
Jun 29 #PHP
解析php中的escape函数
Jun 29 #PHP
使用PHP会话(Session)实现用户登陆功能
Jun 29 #PHP
php获取数组中重复数据的两种方法
Jun 28 #PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
Jun 28 #PHP
You might like
基于mysql的论坛(2)
2006/10/09 PHP
用PHP和ACCESS写聊天室(七)
2006/10/09 PHP
选择PHP作为网站开发语言的原因分享
2012/01/03 PHP
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
2010/05/18 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
javascript常用的正则表达式实例
2014/05/15 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
2014/06/09 Javascript
JavaScript使用cookie实现记住账号密码功能
2015/04/27 Javascript
jQuery时间轴插件使用详解
2015/07/16 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python的id()函数解密过程
2012/12/25 Python
python检测lvs real server状态
2014/01/22 Python
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
python实现简单tftp(基于udp协议)
2018/07/30 Python
Python实现注册、登录小程序功能
2018/09/21 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
2018/12/30 Python
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
口腔工艺技术专业毕业生自荐信
2013/09/27 职场文书
《蒙娜丽莎之约》教学反思
2014/02/27 职场文书
银行办公室岗位职责
2014/03/10 职场文书
业务员岗位职责
2015/02/03 职场文书
2016年寒假家长评语
2015/10/10 职场文书