php常用正则函数实例小结


Posted in PHP onDecember 29, 2016

本文实例总结了php常用正则函数。分享给大家供大家参考,具体如下:

1. mixed preg_replace(mixed pattern, mixed  replacement, mixed  subject, [, int limit])

函数功能:用于正则表达式的搜索和替换。

pattern:正则表达式。
replacement:替换的内容。
subject:需要匹配替换的对象。
limit:可选,指定替换的个数,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。

补充说明

① replacement 可以包含 \\n 形式或 $n 形式的逆向引用,首选使用后者。每个此种引用将被替换为与第 n 个被捕获的括号内的子模式所匹配的文本。n 可以从 0 到 99,其中 \\0 或 $0 指的是被整个模式所匹配的文本。对左圆括号从左到右计数(从 1 开始)以取得子模式的数目。

② 对替换模式在一个逆向引用后面紧接着一个数字时(如 \\11),不能使用 \\ 符号来表示逆向引用。因为这样将会使 preg_replace() 搞不清楚是想要一个 \\1 的逆向引用后面跟着一个数字 1 还是一个 \\11 的逆向引用。解决方法是使用 \${1}1。这会形成一个隔离的 $1 逆向引用,而使另一个 1 只是单纯的文字。

③ 上述参数除 limit 外都可以是一个数组。如果 pattern 和 replacement 都是数组,将以其键名在数组中出现的顺序来进行处理,这不一定和索引的数字顺序相同。如果使用索引来标识哪个 pattern 将被哪个 replacement 来替换,应该在调用 preg_replace() 之前用 ksort() 函数对数组进行排序。

例子 1 :

<?php
$str = "The quick brown fox jumped over the lazy dog.";
$str = preg_replace('/\s/','-',$str);
echo $str;
?>

输出结果为:

The-quick-brown-fox-jumped-over-the-lazy-dog.

例子 2 ,使用数组:

<?php
$str = "The quick brown fox jumped over the lazy dog.";
$patterns[0] = "/quick/";
$patterns[1] = "/brown/";
$patterns[2] = "/fox/";
$replacements[2] = "bear";
$replacements[1] = "black";
$replacements[0] = "slow";
print preg_replace($patterns, $replacements, $str);
/*输出:
The bear black slow jumped over the lazy dog.
*/
ksort($replacements);
print preg_replace($patterns, $replacements, $str);
/*输出:
The slow black bear jumped over the lazy dog.
*/
?>

例子 3 ,使用逆向引用:

<?php
$str = '<a href="http://www.baidu.com/">baidu</a>其他字符<a href="http://www.sohu.com/">sohu</a>';
$pattern = "/<a\s([\s\S]*?)>([\s\S]*?)<\/a>/i";
print preg_replace($pattern, '\\2', $str);
?>

输出结果为:

baidu其他字符sohu

该例子演示了将文本中所有的 <a></a> 标签去掉。

2. int preg_match(string $pattern,  string  $subject [,array  &$matches [,  int $flags=0 [ ,int $offset=0]]])

函数功能:搜索subject与pattern给定的正则表达式的一个匹配。

pattern:要搜索的模式,字符串类型。
subject:输入字符串。
matches:如果提供了参数matches,它将被填充为搜索结果,$matches[0]将包含完整模式匹配到文本,$matches[1]将包含第一捕获子组匹配到的文本。
flags:可以设置为PREG_OFFSET_CAPTURE,如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。
注意:这会改变填充到matches数组,使其每个元素成为一个由第0个元素是匹配到的字符串,第1个元素是该匹配字符串在目标字符串subject中的偏移量。
offset:通常,搜索从目标字符串的开始,可选参数offset用于指定从目标字符串的某个未知开始搜索(单位是字节)。

3. int preg_match_all(string $pattern, string $subject [, array &$matches [, int $flags=PREG_PATTERN_ORDER [, int $offset=0]]])

函数功能:搜索subject中所有匹配pattern给定正则表达式的匹配结果并且将它们以flag指定顺序输出到matches中。

在第一个匹配找到后,子序列继续从最后一次匹配位置搜索。

pattern:要搜索的模式,字符串形式。
subject:输入字符串。
matches:多维数组,作为输出参数输出后所有匹配结果,数组排序通过flags指定。
flags:可以结合下面标记使用(注意不能同时使用PREG_PATTERN_ORDER和PREG_SET_ORDER):

PREG_PATTERN_ORDER

结果排序为$matches[0]保存完整模式的所有匹配,$matches[1] 保存第一个子组的所有匹配, 以此类推.

<?php
preg_match_all("|<[^>]+>(.*)</[^>]+>|U",
  "<b>example: </b><div align=left>this is a test</div>",
  $out, PREG_PATTERN_ORDER);
echo $out[0][0] . ", " . $out[0][1] . "\n";
echo $out[1][0] . ", " . $out[1][1] . "\n";
?>

以上例程会输出:

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

因此, $out[0]是包含匹配完整模式的字符串的数组,$out[1]是包含闭合标签内的字符串的数组.

PREG_SET_ORDER

结果排序为$matches[0]包含第一次匹配得到的所有匹配(包含子组),$matches[1]是包含第二次匹配到的所有匹配(包含子组)的数组, 以此类推.

<?php
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";
?>

以上例程会输出:

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

PREG_OFFSET_CAPTURE

如果这个标记被传递, 每个发现的匹配返回时会增加它相对目标字符串的偏移量. 注意这会改变matches中的每一个匹配结果字符串元素, 使其 成为一个第0个元素为匹配结果字符串, 第1个元素为 匹配结果字符串在subject中的偏移量.

如果没有给定排序标记, 假定设置为PREG_PATTERN_ORDER.

offset:通常,查找时从目标字符串的开始位置开始,可选参数offset用于从目标字符串中指定位置开始搜索(单位是字节)。

PHP 相关文章推荐
高亮度显示php源代码
Oct 09 PHP
php中static静态变量的使用方法详解
Jun 04 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
Jul 02 PHP
php中的boolean(布尔)类型详解
Oct 28 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
May 12 PHP
ThinkPHP中的系统常量和预定义常量集合
Jul 01 PHP
Laravel框架数据库CURD操作、连贯操作总结
Sep 03 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
Mar 17 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
Aug 11 PHP
PHP+AJAX 投票器功能
Nov 11 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 #PHP
php常用数组函数实例小结
Dec 29 #PHP
php正则修正符用法实例详解
Dec 29 #PHP
PHP登录(ajax提交数据和后台校验)实例分享
Dec 29 #PHP
php preg_match的匹配不同国家语言实例
Dec 29 #PHP
php使用正则表达式获取字符串中的URL
Dec 29 #PHP
php实现水印文字和缩略图的方法示例
Dec 29 #PHP
You might like
PHP笔记之:基于面向对象设计的详解
2013/05/14 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
php生成与读取excel文件
2016/10/14 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009/08/04 Javascript
jquery封装的对话框简单实现
2013/07/21 Javascript
纯js简单日历实现代码
2013/10/05 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
2018/12/06 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
2019/08/08 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
使用Python编写Linux系统守护进程实例
2015/02/03 Python
python写入xml文件的方法
2015/05/08 Python
5个很好的Python面试题问题答案及分析
2018/01/19 Python
Python实现的knn算法示例
2018/06/14 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
几道Web/Ajax的面试题
2016/11/05 面试题
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
2014年行政部工作总结
2014/11/19 职场文书
使用HTML+Css+transform实现3D导航栏的示例代码
2021/03/31 HTML / CSS