php新版本废弃 preg_replace /e 修饰符
- php新版本废弃 preg_replace /e 修饰符
- 分类: PHP -- : 3531人阅读 评论() 收藏 举报
- php正则
- 最近服务器php版本升级到了 5.6 发现出了很多警告
- [php] view plaincopy在CODE上查看代码片派生到我的代码片
- preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead
- 一开始没注意,后来发现 很多这样的警告,于是网上查了下 发现 php5.5版本以上 就废弃了 preg_replace 函数中 /e 这个修饰符 /e 这个修饰符的意思 就是让 正则替换的 时候 替换规则 支持 php 代码
- 那么 应该怎么办呢
- 其实 只要 把 preg_replace 里面 有 /e 修饰符的代码 修改成 preg_replace _callback 然后重新写下就好了
- 例子
- 最简单的 写法
- [php] view plaincopy在CODE上查看代码片派生到我的代码片
- preg_replace("/([A-Z])/e", "'_' . strtolower('\\1')", $str)
- 修改成
- [php] view plaincopy在CODE上查看代码片派生到我的代码片
- preg_replace("/([A-Z])/",'gwyy', $str);
- function gwyy($match) {
- return '_'.strtolower($match[]);
- }
- 第二个参数是个 函数名 然后在外部写一个函数 但是 我们每次定义一个函数 感觉很麻烦 所以我们可以用匿名函数
- 比如说
- [php] view plaincopy在CODE上查看代码片派生到我的代码片
- preg_replace("/([A-Z])/e", "'_' . strtolower('\\1')", $str)
- 修改成
- [php] view plaincopy在CODE上查看代码片派生到我的代码片
- preg_replace_callback('/([A-Z])/',
- function ($matches) {
- return '_' . strtolower($matches[]);
- },
- $str)
- 即可
- 这里特别警告 修改后 /([A-Z])/e 最后一个 e 一定要去掉 不然就出错了
- 如果在类里面 还能这么写
- [php] view plaincopy在CODE上查看代码片派生到我的代码片
- class a {
- private $joinStr = "__AAAAA__";
- public function __construct() {
- $this->joinStr = preg_replace_callback("/__([A-Z_-]+)__/sU",array($this,'gwyy'),$this->joinStr);
- echo $this->joinStr;
- }
- public function gwyy($match) {
- print_r($match);
- return 'aaa';
- }
- }
- $a = new a();
- 第二个参数不是一个函数 而变成了一个数组 表示 调用 $this 类 里面的 gwyy 方法 执行 gwyy会自动接受到 一个 $match 参数表
- 下面再看一个稍微复杂点的例子
- [php] view plaincopy在CODE上查看代码片派生到我的代码片
- $patterns = '/'.$begin.$parseTag.$n1.'\/(\s*?)'.$end.'/eis';
- $replacement = "\$this->parseXmlTag('$tagLib','$tag','$1','')";
- $content = preg_replace($patterns, $replacement,$content);
- 这个替换 使用了 类里面的自定义方法 如果 你再 用匿名函数直接套的话 会提示 错误 因为 匿名函数上下文里面 并没有 该方法和 该变量 所以 要用 use() 来引入 同时 注意 一定要 把 正则里面 e 去掉
- [php] view plaincopy在CODE上查看代码片派生到我的代码片
- $that = $this;
- $patterns = '/'.$begin.$parseTag.$n1.'\/(\s*?)'.$end.'/is';
- $content=preg_replace_callback($patterns, function($matches) use($tagLib,$tag,$that){
- return $that->parseXmlTag($tagLib,$tag,$matches[],'');
- },$content);
- 这里 用 $that 代替 $this; 好了 今天先记录到这里吧 。
- 小烟原创,转载请注明出处!
php新版本废弃 preg_replace /e 修饰符的更多相关文章
- php新版本号废弃 preg_replace /e 修饰符
近期serverphp版本号升级到了 5.6 发现出了非常多警告 preg_replace(): The /e modifier is deprecated, use preg_replace_ca ...
- 关于thinkhphp3.1中废弃 preg_replace /e 修饰符
警告:preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead 网上查了下 发现 php5.5版 ...
- 正则表达式preg_replace中危险的/e修饰符带来的安全漏洞问题
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit]) /e 修饰符使 preg_rep ...
- 慎用preg_replace危险的/e修饰符(一句话后门常用)
要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误 preg_replace函数原型: mi ...
- [PHP] PHP7已经删除了preg_replace的e修饰符
官网提示是这样的,对/e修饰符的支持已删除.请改用preg_replace_callback()原因是/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码( ...
- PHP正则表达式模式修饰符 /i, /is, /s, /isU等
模式修饰符 下面列出了当前可用的 PCRE 修饰符.括号中提到的名字是 PCRE 内部这些修饰符的名称. 模式修饰符中的空格,换行符会被忽略,其他字符会导致错误. i (PCRE_CASELESS) ...
- /i,/m,/s,/x,/A,/s,/U,/x,/j,/u 等正则修饰符用法~
i (PCRE_CASELESS) 如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配. m (PCRE_MULTILINE) 默认情况下,PCRE 认为目标字符串是由单行字符组成的(然而实际上 ...
- Objective C中的ARC的修饰符的使用---- 学习笔记九
#import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...
- PHP正则表达式模式修饰符详解
PHP模式修饰符又叫模式修正符,是在正则表达式的定界符之外使用.主要用来调整正则表达式的解释,提扩展了正则表达式在匹配.替换等操作的某些功能,增强了正则的能力.但是有很多地方的解释都是错误的,也容易误 ...
随机推荐
- Android从开源到碎片化 开发者叛离的真相
Android从诞生开始就受到热捧,并日益普及.它有别于以往的手机及移动终端操作系统,其独具的开源性.系统廉价性和提供给第三方大自由度的创新空间,以及不受硬件约束的优势,获得了广大开放社群的支持.但是 ...
- 动态jdk启动项目
昨天遇到,服务器安装jdk1.7,但是springboot项目用jdk1.8编译的,所以需要指定jdk版本启动: nohup /root/jdk1.8.0_11/bin/java -jar /root ...
- [转]How to solve SSIS error code 0xC020801C/0xC004700C/0xC0047017
本文转自:http://www.codeproject.com/Articles/534651/HowplustoplussolveplusSSISpluserrorpluscodeplus0xC B ...
- go语言基础之匿名变量和多重赋
1.匿名变量 package main //必须有一个main包 import "fmt" func test() (a, b, c int) { return 1, 2, 3 } ...
- 基于 Scrapy-redis 的分布式爬虫详细设计
基于 Scrapy-redis 的分布式爬虫设计 目录 前言 安装 环境 Debian / Ubuntu / Deepin 下安装 Windows 下安装 基本使用 初始化项目 创建爬虫 运行爬虫 ...
- 关于Django迁移出现问题
关于Django迁移出现问题 源码: #coding:utf- from django.db import models # Create your models here. class BookIn ...
- redhat6.3 找不到libXP.so.6解决方法
最近做redhat安装matlab2008a 操作,遇到上面的问题,先记录如下: 网上找到安装包:libXp-1.0.2-1mamba.x86_64.rpm 然后使用命令: sudo rpm -ivh ...
- scrapy报错:ImportError: No module named 'win32api'
https://github.com/mhammond/pywin32/releases 下载安装对应的版本即可.
- elastic不错的官方文档(中文)
https://www.blog-china.cn/template/documentHtml/1484101683485.html http://www.open-open.com/doc/list ...
- webpack安装以及一些配置
在用webpack之前... 或说没有实现组件化之前的web1.0时代! 最终迈向web2..0之后的时代! ===============华丽的分割线================== 安装步骤有 ...