如何使用preg_replace()替换函数仅返回PHP NameSpace的父“组件”?
基本上:
输入:\Base\Ent\User
;期望的输出:Ent
我一直在使用substr()
执行此操作,但我想将其转换为正则表达式。
注意:这可以在没有preg_match_all()
的情况下完成吗?
现在,我还有一个代码来获取所有父组件:
$s = '\\Base\\Ent\\User';
print preg_replace('~\\\\[^\\\\]*$~', '', $s);
//=> \Base\Ent
但我只想返回Ent
。
谢谢!
答案 0 :(得分:1)
我认为preg_match
可能是更好的选择。
$s = '\\Base\\Ent\\User';
$m = [];
print preg_match('/([^\\\\]*)\\\\[^\\\\]*$/', $s, $m);
print $m[1];
如果从$中向后读取正则表达式,它表示匹配许多不是反斜杠的东西,然后是反斜杠,然后是许多不反斜杠的东西,并保存该匹配以便以后(在{{ 1}})。
答案 1 :(得分:1)
正如Rocket Hazmat所说,explode
几乎肯定会比正则表达式更好。如果它实际上比正则表达式慢,我会感到惊讶。
但是,既然你问过,这是一个正则表达式解决方案:
$path = '\Base\Ent\User';
$search = preg_match('~([^\\\\]+)\\\\[^\\\\]+$~', $path, $matches);
if($search) {
$parent = $matches[1];
}
else {
$parent = ''; // handles the case where the path is just, e.g., "User"
}
echo $parent; // echos Ent
答案 2 :(得分:0)
怎么样
$path = '\Base\Ent\User';
$section = substr(strrchr(substr(strrchr($path, "\\"), 1), "\\"), 1);
或者
$path = '\Base\Ent\User';
$section = strstr(substr($path, strpos($path, "\\", 1)), "\\", true);