嗯哼?!。 2023-03-07 20:59 采纳率: 33.3%
浏览 24
已结题

PHP的PREG正则匹配

    var_dump(preg_repalce('/.*/i','ok','2'));           // string(4) "okok" 
    var_dump(preg_replace('/.*/i','ok','2333'));      // string(4) "okok" 

这两句的替换是如何发生的?
是否是后向引用,或者其他原因,麻烦详细解释下(不要仅说原因,解释下why)。


    var_dump(preg_replace('/(.*)/ie','strtolower("\\1")','{${phpinfo()}}'));        // phpinfo() 执行成功 并输出 string(0) "" 
    var_dump(preg_replace('/(.*)/ie','strtolower("{${phpinfo()}}")','{${phpinfo()}}'));   // phpinfo() 执行成功 并输出 string(0) "" 
    // strtolower("{${phpinfo()}}") 执行后相当于 strtolower("{${1}}") 又相当于 strtolower("{null}") 又相当于 '' 空字符串

了解过可变变量,比如$a="hello"; $$a="world"; echo $a.${$a}; 。但是不理解这里的{${phpinfo()}}。

在PHP语言中单引号和双引号是有区别的,单引号代表纯字符串,双引号则会解析中间变量。
但是,eval(strtolower("{${phpinfo()}}"));中phpinfo()是如何执行phpinfo()是函数不是变量,如何解析。

  • 写回答

2条回答 默认 最新

  • CSDN专家-showbo 2023-03-07 21:47
    关注

    先匹配整个串,执行一次替换,然后.*又可以匹配空字符串,又替换了一次,所以就是okok。下面是js的替换过程

    img

    第二个问题可以参考下面的文章,说得比较详细
    https://blog.csdn.net/giaogiao123/article/details/121217533

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月16日
  • 已采纳回答 3月8日
  • 创建了问题 3月7日

悬赏问题

  • ¥15 Fluent udf 编写问题
  • ¥15 求合并两个字节流VB6代码
  • ¥15 Pyqt 如何正确的关掉Qthread,并且释放其中的锁?
  • ¥30 网站服务器通过node.js部署了一个项目!前端访问失败
  • ¥15 WPS访问权限不足怎么解决
  • ¥15 java幂等控制问题
  • ¥15 海湾GST-DJ-N500
  • ¥15 氧化掩蔽层与注入条件关系
  • ¥15 Django DRF 如何反序列化得到Python对象类型数据
  • ¥15 多数据源与Hystrix的冲突