PHP:preg_replace()获取NameSpace的“父”组件

时间:2014-03-10 21:05:27

标签: php regex

如何使用preg_replace()替换函数仅返回PHP NameSpace的父“组件”?

基本上:

输入:\Base\Ent\User;期望的输出:Ent

我一直在使用substr()执行此操作,但我想将其转换为正则表达式。 注意:这可以在没有preg_match_all()的情况下完成吗?

现在,我还有一个代码来获取所有父组件:

$s = '\\Base\\Ent\\User';
print preg_replace('~\\\\[^\\\\]*$~', '', $s);
//=> \Base\Ent

但我只想返回Ent

谢谢!

3 个答案:

答案 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);