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

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日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效