php正则表达式学习笔记


Posted in PHP onNovember 13, 2015

php正则表达式学习笔记分享:

1.创建正则表达式

$regex = '/\d/i';
与JavaScript中的第一个方式有点像,只是这里的话是个字符串。

 2.正则表达式中的特殊字符

特殊字符有:   . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

3.正则表达式中的函数

有8个方法,preg_match与preg_match_all,preg_replace与preg_replace_callback,preg_grep、preg_split、preg_last_error和preg_quote。 

preg_match:

执行一个正则表达式匹配

 php正则表达式学习笔记

返回 pattern 的匹配次数。 它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后,将会停止搜索

$subject = "dd133aa2";
$pattern = '/\d+/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);

上面的示例代码加了参数“PREG_OFFSET_CAPTURE”,这样的话,在$matches中会多一个偏移数。例如下面的“2”

 php正则表达式学习笔记

preg_match_all:

执行一个“全局”正则表达式匹配

 php正则表达式学习笔记

返回完整匹配次数(可能是0),或者如果发生错误返回FALSE。

下面的代码中$subject和$pattern与上面的都一样,唯一不同的是preg_match换成了preg_match_all。

preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);

返回的次数是2,匹配到了两次,再看看数组$matches中的输入,有两个。比上面的多了一个。

 php正则表达式学习笔记

 preg_replace:

执行一个正则表达式的搜索和替换

php正则表达式学习笔记

如果subject是一个数组, preg_replace()返回一个数组, 其他情况下返回一个字符串。

如果匹配被查找到,替换后的subject被返回,其他情况下 返回没有改变的 subject。如果发生错误,返回 NULL。

在代码中$subject是一个数组,里面有两组字符串,接下来是将多个数字替换为大写的“Z”。

$subject = array("dd133aa2", "kk1ff3");
$pattern = '/\d+/';
$result = preg_replace($pattern, 'Z', $subject);
print_r($result);

php正则表达式学习笔记

preg_replace_callback:

执行一个正则表达式搜索并且使用一个“回调”进行替换

php正则表达式学习笔记

这个函数的行为除了可以指定一个callback替代replacement进行替换 字符串的计算,其他方面等同于 preg_replace(),包括返回的结果。

下面的代码也是替换成大写的“Z”,回调函数中每次$matches中的内容就是代码中注释的部分,第一次是133,第二次是2。

$subject = "dd133aa2";
$pattern = '/\d+/';
$result = preg_replace_callback($pattern, function($matches) {
    //$matches [0] => 133
    //$matches [0] => 2
    return 'Z';
   }, $subject);
print_r($result);

preg_grep:

返回匹配模式的数组条目

php正则表达式学习笔记

返回使用input中key做索引的数组

下面的示例代码中,在$subject数组中我加了个“ddsdfd”,里面没有包含数字,在做匹配的时候,就把这个没数字的给过滤掉了。

而$result2打印出来的正好相反,是把过滤的打印出来了,但是key还是为2,并不是0。

$subject = array("dd133aa2", "kk1ff3", "ddsdfd");
$pattern = '/\d+/';
$result = preg_grep($pattern, $subject);
$result2 = preg_grep($pattern, $subject, PREG_GREP_INVERT);
print_r($result);
print_r($result2);

php正则表达式学习笔记

preg_split:

通过一个正则表达式分隔字符串

 php正则表达式学习笔记

返回一个使用 pattern 边界分隔 subject 后得到 的子串组成的数组。

下面代码中,我将$pattern中的表达式加了括号,为了在$result2中捕获到。

$subject = "dd133aa2cc";
$pattern = '/(\d+)/';
$result = preg_split($pattern, $subject);
$result2 = preg_split($pattern, $subject, null, PREG_SPLIT_DELIM_CAPTURE);
print_r($result);
print_r($result2);

php正则表达式学习笔记

preg_last_error:

返回最后一个PCRE正则执行产生的错误代码

preg_match('/(?:\D+|<\d+>)*[!?]/', 'foobar foobar foobar');
$result = preg_last_error();//PREG_BACKTRACK_LIMIT_ERROR 调用回溯限制超出
print_r($result);

preg_quote:

转义正则表达式字符

php正则表达式学习笔记

返回转义后的字符串

下面的代码中,$subject中有两个需要转义的字符,“.”和“?”。

将$result打印出后是“dd\.a\?a2cc”,而在$result2中,多加了个参数“a”,这样的话“a”也会被转义,“dd\.\a\?\a2cc”

$subject = "dd.a?a2cc";
$result = preg_quote($subject);
$result2 = preg_quote($subject, 'a');
print_r($result);
print_r($result2);

4、模式修正符

php正则表达式学习笔记

以上就是关于php正则表达式的全部内容介绍,希望对大家的学习有所帮助。

PHP 相关文章推荐
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
Mar 15 PHP
一段php加密解密的代码
Jul 16 PHP
PHP 数据库树的遍历方法
Feb 06 PHP
PHP中使用数组实现堆栈数据结构的代码
Feb 05 PHP
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
Mar 07 PHP
微信公众平台实现获取用户OpenID的方法
Apr 15 PHP
php递归遍历多维数组的方法
Apr 18 PHP
Symfony生成二维码的方法
Feb 04 PHP
PHP常见数组函数用法小结
Mar 21 PHP
PHP中的函数声明与使用详解
May 27 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
php中配置文件保存修改操作 如config.php文件的读取修改等操作
May 12 PHP
php邮箱地址正则表达式验证
Nov 13 #PHP
合格的PHP程序员必备技能
Nov 13 #PHP
PHP基于yii框架实现生成ICO图标
Nov 13 #PHP
php中session定期自动清理的方法
Nov 12 #PHP
详解php设置session(过期、失效、有效期)
Nov 12 #PHP
php表单提交实例讲解
Nov 12 #PHP
php用户注册信息验证正则表达式
Nov 12 #PHP
You might like
介绍php设计模式中的工厂模式
2008/06/12 PHP
php 静态页面中显示动态内容
2009/08/14 PHP
php 中的4种标记风格介绍
2012/05/10 PHP
php自定义错误处理用法实例
2015/03/20 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
浅谈Javascript实现继承的方法
2015/07/06 Javascript
超漂亮的jQuery图片轮播特效
2015/11/24 Javascript
jQuery 操作input中radio的技巧
2016/07/18 Javascript
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
Javascript数组中push方法用法分析
2016/10/31 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
使用Node.js实现RESTful API的示例
2017/08/01 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
VUE 实现element upload上传图片到阿里云
2020/08/12 Javascript
Python os模块介绍
2014/11/30 Python
Python字符串详细介绍
2015/05/09 Python
python 计算文件的md5值实例
2017/01/13 Python
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
python基于SMTP协议发送邮件
2019/05/31 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
python字典排序的方法
2019/10/12 Python
如何在python中实现随机选择
2019/11/02 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
python中Pexpect的工作流程实例讲解
2021/03/02 Python
连带责任保证书
2014/04/29 职场文书
奥运会口号
2014/06/13 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
幼儿园大班教育随笔
2015/08/14 职场文书
2016年端午节红领巾广播稿
2015/12/18 职场文书
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电
一文搞懂MySQL索引页结构
2022/02/28 MySQL
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle