PHP:preg_replace()位于命名空间上

PHP:preg_replace()位于命名空间上,php,regex,escaping,Php,Regex,Escaping,我试图从一个字符串中的PHP名称空间中获取作为字符串的父“元素”名称,ideia的作用是: 输入:\Base\Util\Review;所需输出:\Base\Util 我这里的主要问题是如何处理正则表达式中的反斜杠转义,到目前为止,我可以使其与普通斜杠一起工作: $ns = "/Base/Util/Review"; print preg_replace("#\/[^/]*$#", '', $ns); // Outputs => /Base/Util 谢谢。您可以不使用preg\u repl

我试图从一个字符串中的PHP名称空间中获取作为字符串的父“元素”名称,ideia的作用是:

输入:
\Base\Util\Review
;所需输出:
\Base\Util

我这里的主要问题是如何处理正则表达式中的反斜杠转义,到目前为止,我可以使其与普通斜杠一起工作:

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

谢谢。

您可以不使用
preg\u replace

$ns = "\Base\Util\Review";
print implode('\\', array_slice(explode('\\',$ns),0,-1));
另一种选择:

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

您可以不使用
preg\u replace

$ns = "\Base\Util\Review";
print implode('\\', array_slice(explode('\\',$ns),0,-1));
另一种选择:

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

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

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

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

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

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

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

$regex = '#\\\\#'; // regex matching one backslash
您需要对每个
\
进行一次转义,以转义其在正则表达式中的特殊含义,然后再次对每个
\
进行一次转义,以转义其在PHP字符串文字中的含义。

这应该可以:

$s = '\\Base\\Util\\Review';
$r = preg_replace('~\\\\[^\\\\]*$~', '', $s);
//=> \Base\Util
这应该起作用:

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

感谢您详细解释这一点!感谢您详细解释这一点!我的代码上有类似的东西作为临时修复。无论如何,谢谢。我的代码上有类似的东西作为临时修复。无论如何,谢谢你。