1. php新版本废弃 preg_replace /e 修饰符
  2. 分类: PHP -- : 3531人阅读 评论() 收藏 举报
  3. php正则
  4. 最近服务器php版本升级到了 5.6 发现出了很多警告
  5. [php] view plaincopyCODE上查看代码片派生到我的代码片
  6. preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead
  7.  
  8. 一开始没注意,后来发现 很多这样的警告,于是网上查了下 发现 php5.5版本以上 就废弃了 preg_replace 函数中 /e 这个修饰符 /e 这个修饰符的意思 就是让 正则替换的 时候 替换规则 支持 php 代码
  9.  
  10. 那么 应该怎么办呢
  11. 其实 只要 preg_replace 里面 /e 修饰符的代码 修改成 preg_replace _callback 然后重新写下就好了
  12.  
  13. 例子
  14.  
  15. 最简单的 写法
  16. [php] view plaincopyCODE上查看代码片派生到我的代码片
  17. preg_replace("/([A-Z])/e", "'_' . strtolower('\\1')", $str)
  18. 修改成
  19. [php] view plaincopyCODE上查看代码片派生到我的代码片
  20. preg_replace("/([A-Z])/",'gwyy', $str);
  21. function gwyy($match {
  22. return '_'.strtolower($match[]);
  23. }
  24.  
  25. 第二个参数是个 函数名 然后在外部写一个函数 但是 我们每次定义一个函数 感觉很麻烦 所以我们可以用匿名函数
  26.  
  27. 比如说
  28.  
  29. [php] view plaincopyCODE上查看代码片派生到我的代码片
  30. preg_replace("/([A-Z])/e", "'_' . strtolower('\\1')", $str)
  31.  
  32. 修改成
  33. [php] view plaincopyCODE上查看代码片派生到我的代码片
  34. preg_replace_callback('/([A-Z])/',
  35. function ($matches) {
  36. return '_' . strtolower($matches[]);
  37. },
  38. $str)
  39. 即可
  40.  
  41. 这里特别警告 修改后 /([A-Z])/e 最后一个 e 一定要去掉 不然就出错了
  42.  
  43. 如果在类里面 还能这么写
  44. [php] view plaincopyCODE上查看代码片派生到我的代码片
  45. class a {
  46.  
  47. private $joinStr = "__AAAAA__";
  48.  
  49. public function __construct() {
  50. $this->joinStr = preg_replace_callback("/__([A-Z_-]+)__/sU",array($this,'gwyy'),$this->joinStr);
  51. echo $this->joinStr;
  52. }
  53.  
  54. public function gwyy($match) {
  55. print_r($match);
  56. return 'aaa';
  57. }
  58.  
  59. }
  60. $a = new a();
  61.  
  62. 第二个参数不是一个函数 而变成了一个数组 表示 调用 $this 里面的 gwyy 方法 执行 gwyy会自动接受到 一个 $match 参数表
  63.  
  64. 下面再看一个稍微复杂点的例子
  65. [php] view plaincopyCODE上查看代码片派生到我的代码片
  66. $patterns = '/'.$begin.$parseTag.$n1.'\/(\s*?)'.$end.'/eis';
  67. $replacement = "\$this->parseXmlTag('$tagLib','$tag','$1','')";
  68. $content = preg_replace($patterns, $replacement,$content);
  69.  
  70. 这个替换 使用了 类里面的自定义方法 如果 你再 用匿名函数直接套的话 会提示 错误 因为 匿名函数上下文里面 并没有 该方法和 该变量 所以 要用 use() 来引入 同时 注意 一定要 正则里面 e 去掉
  71. [php] view plaincopyCODE上查看代码片派生到我的代码片
  72. $that = $this;
  73. $patterns = '/'.$begin.$parseTag.$n1.'\/(\s*?)'.$end.'/is';
  74. $content=preg_replace_callback($patterns, function($matches) use($tagLib,$tag,$that){
  75. return $that->parseXmlTag($tagLib,$tag,$matches[],'');
  76. },$content);
  77.  
  78. 这里 $that 代替 $this; 好了 今天先记录到这里吧
  79.  
  80. 小烟原创,转载请注明出处!

php新版本废弃 preg_replace /e 修饰符的更多相关文章

  1. php新版本号废弃 preg_replace /e 修饰符

    近期serverphp版本号升级到了 5.6  发现出了非常多警告 preg_replace(): The /e modifier is deprecated, use preg_replace_ca ...

  2. 关于thinkhphp3.1中废弃 preg_replace /e 修饰符

    警告:preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead 网上查了下 发现 php5.5版 ...

  3. 正则表达式preg_replace中危险的/e修饰符带来的安全漏洞问题

    mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit]) /e 修饰符使 preg_rep ...

  4. 慎用preg_replace危险的/e修饰符(一句话后门常用)

    要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误     preg_replace函数原型: mi ...

  5. [PHP] PHP7已经删除了preg_replace的e修饰符

    官网提示是这样的,对/e修饰符的支持已删除.请改用preg_replace_callback()原因是/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码( ...

  6. PHP正则表达式模式修饰符 /i, /is, /s, /isU等

    模式修饰符 下面列出了当前可用的 PCRE 修饰符.括号中提到的名字是 PCRE 内部这些修饰符的名称. 模式修饰符中的空格,换行符会被忽略,其他字符会导致错误. i (PCRE_CASELESS) ...

  7. /i,/m,/s,/x,/A,/s,/U,/x,/j,/u 等正则修饰符用法~

    i (PCRE_CASELESS) 如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配. m (PCRE_MULTILINE) 默认情况下,PCRE 认为目标字符串是由单行字符组成的(然而实际上 ...

  8. Objective C中的ARC的修饰符的使用---- 学习笔记九

    #import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...

  9. PHP正则表达式模式修饰符详解

    PHP模式修饰符又叫模式修正符,是在正则表达式的定界符之外使用.主要用来调整正则表达式的解释,提扩展了正则表达式在匹配.替换等操作的某些功能,增强了正则的能力.但是有很多地方的解释都是错误的,也容易误 ...

随机推荐

  1. Android从开源到碎片化 开发者叛离的真相

    Android从诞生开始就受到热捧,并日益普及.它有别于以往的手机及移动终端操作系统,其独具的开源性.系统廉价性和提供给第三方大自由度的创新空间,以及不受硬件约束的优势,获得了广大开放社群的支持.但是 ...

  2. 动态jdk启动项目

    昨天遇到,服务器安装jdk1.7,但是springboot项目用jdk1.8编译的,所以需要指定jdk版本启动: nohup /root/jdk1.8.0_11/bin/java -jar /root ...

  3. [转]How to solve SSIS error code 0xC020801C/0xC004700C/0xC0047017

    本文转自:http://www.codeproject.com/Articles/534651/HowplustoplussolveplusSSISpluserrorpluscodeplus0xC B ...

  4. go语言基础之匿名变量和多重赋

    1.匿名变量 package main //必须有一个main包 import "fmt" func test() (a, b, c int) { return 1, 2, 3 } ...

  5. 基于 Scrapy-redis 的分布式爬虫详细设计

    基于 Scrapy-redis 的分布式爬虫设计   目录 前言 安装 环境 Debian / Ubuntu / Deepin 下安装 Windows 下安装 基本使用 初始化项目 创建爬虫 运行爬虫 ...

  6. 关于Django迁移出现问题

    关于Django迁移出现问题 源码: #coding:utf- from django.db import models # Create your models here. class BookIn ...

  7. redhat6.3 找不到libXP.so.6解决方法

    最近做redhat安装matlab2008a 操作,遇到上面的问题,先记录如下: 网上找到安装包:libXp-1.0.2-1mamba.x86_64.rpm 然后使用命令: sudo rpm -ivh ...

  8. scrapy报错:ImportError: No module named 'win32api'

    https://github.com/mhammond/pywin32/releases 下载安装对应的版本即可.

  9. elastic不错的官方文档(中文)

    https://www.blog-china.cn/template/documentHtml/1484101683485.html http://www.open-open.com/doc/list ...

  10. webpack安装以及一些配置

    在用webpack之前... 或说没有实现组件化之前的web1.0时代! 最终迈向web2..0之后的时代! ===============华丽的分割线================== 安装步骤有 ...