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 相关文章推荐
第二节--PHP5 的对象模型
Nov 16 PHP
Windows下XDebug 手工配置与使用说明
Jul 11 PHP
PHP array 的加法操作代码
Jul 24 PHP
php feof用来识别文件末尾字符的方法
Aug 01 PHP
php 缩略图实现函数代码
Jun 23 PHP
php的memcache类分享(memcache队列)
Mar 26 PHP
PHP 正则表达式小结
Feb 12 PHP
PHP生成唯一订单号
Jul 05 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
Mar 07 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
Sep 30 PHP
PHP小偷程序的设计与实现方法详解
Oct 15 PHP
php Session无效分析资料整理
Nov 29 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
洪恩在线成语词典小偷程序php版
2012/04/20 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
如何实现php图片等比例缩放
2015/07/28 PHP
PHP常用设计模式之委托设计模式
2016/02/13 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
php实现微信原生支付(扫码支付)功能
2018/05/30 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
2019/10/21 PHP
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
JavaScript事件处理的方式(三种)
2016/04/26 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
Python 修改列表中的元素方法
2018/06/26 Python
Python图像处理之gif动态图的解析与合成操作详解
2018/12/30 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
审核会计岗位职责
2013/11/08 职场文书
技术学校毕业生求职信分享
2013/12/02 职场文书
大学团支书的自我评价分享
2013/12/14 职场文书
中年人生感言
2014/02/04 职场文书
企业员工培训感言
2014/02/26 职场文书
学校读书活动总结
2014/06/30 职场文书
迎国庆演讲稿
2014/09/15 职场文书
公司周年庆典标语
2014/10/07 职场文书
2014年残联工作总结
2014/11/21 职场文书
2014年绿化工作总结
2014/12/09 职场文书
教师个人总结范文
2015/02/11 职场文书
党支部书记岗位职责
2015/02/15 职场文书
Java并发编程之Executor接口的使用
2021/06/21 Java/Android
python中的getter与setter你了解吗
2022/03/24 Python