我从正则表达式中得到了一些意想不到的结果,这意味着要替换命名空间上的类名。替换似乎发生了两次,因此被替换的类名是重复的(参见下面的示例)。
我实际上已经通过将 reg ex 更改为匹配 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" }