我从正则表达式中得到了一些意外的结果,这个表达式本意是替换命名空间上的类名。替换似乎发生了两次,因此被替换的类名出现了重复(见下面的示例)。
实际上,我通过将正则表达式更改为匹配 1 次或多次(
然而,我有一点困惑,不太清楚为什么一开始会出现这个问题。
以下是问题的一个示例:
实际上,我通过将正则表达式更改为匹配 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" }
preg_match_all
显示什么?preg_match
总是只显示最多一个匹配。 - John Dvorak[...]*$
可以匹配行尾。虽然很难说为什么它在到达结尾后仍然会继续匹配。 - John Dvorak