PHP:NameSpace上的preg_replace()

时间:2014-03-10 19:03:41

标签: php regex escaping

我正在尝试从字符串中的PHP命名空间中获取父“元素”名称作为字符串,ideia是这样做的:

输入:\Base\Util\Review;期望的输出:\Base\Util;

我的主要问题是如何处理正则表达式中的反斜杠转义,到目前为止我可以使用正常的斜杠:

$ns = "/Base/Util/Review";
print preg_replace("#\/[^/]*$#", '', $ns);
// Outputs => /Base/Util

谢谢。

4 个答案:

答案 0 :(得分:1)

您可以在没有preg_replace

的情况下执行此操作
$ns = "\Base\Util\Review";
print implode('\\', array_slice(explode('\\',$ns),0,-1));

另一种选择:

$ns = "\Base\Util\Review";
print substr($ns,0,strrpos($ns,'\\'));

答案 1 :(得分:1)

试试这个

print preg_replace("#\\\[^\\\]*$#", '', $ns) 

答案 2 :(得分:1)

您必须为每个文字反斜杠编写四个反斜杠:

$regex = '#\\\\#'; // regex matching one backslash

你需要转义每个\一次以逃避其在正则表达式中的特殊含义,并再次转义每个\一次以逃避其在PHP字符串文字中的含义。

答案 3 :(得分:1)

这应该有效:

$s = '\\Base\\Util\\Review';
$r = preg_replace('~\\\\[^\\\\]*$~', '', $s);
//=> \Base\Util