我从正则表达式中获得了一些意想不到的结果,这意味着要替换名称空间上的类名.替换似乎发生了两次,因此被替换的类名是重复的(参见下面的示例).
我实际上通过将reg ex更改为匹配1或更多(+)而不是0或更多(*)来解决问题,这实际上对于我想要的更准确.
但是,我有点困惑为什么我首先得到一个问题.
以下是问题的示例:
$classns = 'components\groups\GroupsController';
$newclass = 'GroupsAccess';
$classns = preg_replace('/[^\\\\]*$/', $newclass, $classns);
echo $classns;
Run Code Online (Sandbox Code Playgroud)
结果
components\groups\GroupsAccessGroupsAccess
Run Code Online (Sandbox Code Playgroud)
预期
components\groups\GroupsAccess
Run Code Online (Sandbox Code Playgroud)
*是否可能匹配单词边界或某种性质的东西?
对我来说令人困惑的部分是使用相同正则表达式的preg_match只显示一个结果,因此它似乎是preg_match如何运行正则表达式的特定内容.
例如
preg_match('/[^\\\\]*$/', $classns, $m);
var_dump($m);
Run Code Online (Sandbox Code Playgroud)
结果
array(1) { [0]=> string(12) "GroupsAccess" }
Run Code Online (Sandbox Code Playgroud)