gpt4 book ai didi

php - preg_replace 双重替换

转载 作者:可可西里 更新时间:2023-11-01 00:22:59 26 4
gpt4 key购买 nike

我从正则表达式中得到了一些意想不到的结果,这意味着要替换命名空间上的类名。替换似乎发生了两次,因此被替换的类名是重复的(请参见下面的示例)。

我实际上已经通过更改正则表达式以匹配 1 个或多个 (+) 而不是 0 个或多个 (*) 来解决问题,这实际上更准确为了我想要的。

但是,我对为什么一开始会遇到问题感到有点困惑。

这是问题的一个例子:

$classns  = 'components\groups\GroupsController';
$newclass = 'GroupsAccess';
$classns = preg_replace('/[^\\\\]*$/', $newclass, $classns);
echo $classns;

结果

components\groups\GroupsAccessGroupsAccess

预期

components\groups\GroupsAccess

* 是否可能匹配单词边界或类似性质的东西?

令我感到困惑的是,使用相同正则表达式的 preg_match 只显示一个结果,因此它似乎与 preg_match 如何运行正则表达式有关。

例如

preg_match('/[^\\\\]*$/', $classns, $m);
var_dump($m);

结果

array(1) { [0]=> string(12) "GroupsAccess" }

最佳答案

* 不匹配单词边界,它匹配空字符串

你的表达首先是匹配的

components\groups\ GroupsController

并且 $ 是一个匹配位置的 anchor ,它位于字符串结尾之前(或字符串结尾之前的 \n )。

因此,在第一次匹配之后,正则表达式解析器的位置是在最后一个“r”之后和字符串结尾之前,当它再次尝试匹配您的正则表达式时。它将再找到一个匹配项 ==> 出现 0 次 /(空字符串),后跟字符串的末尾。

然后它继续前进,识别字符串的结尾并结束。

关于php - preg_replace 双重替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13705170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com