我有一个由如下网址组成的字符串:http://www.foo.com/parentfoo/childfoo/
我希望将其转换为http://www.foo.com/parentfoo#childfoo
删除最后两个'的最佳方法是什么? /'并取代倒数第二个' /'用' #'?
答案 0 :(得分:2)
先删除Last Slash,然后用Hash替换Last Slash
<?php
$url = "http://www.foo.com/parentfoo/childfoo/";
$url = substr($url, 0, -1);
$add = "#";
$new = preg_replace("~\/(?!.*\/)~", $add, $url);
echo $new;
?>
<强>输出强>
http://www.foo.com/parentfoo#childfoo
答案 1 :(得分:1)
以下是使用regex
查找最后/
的解决方案。
<?php
$url = 'http://www.foo.com/parentfoo/childfoo/';
$output = preg_replace('!/([^/]+)/$!', "/#\\1", $url);
echo $output."\n";
?>
以下是对其工作原理的一些解释。
首先,我们使用!
而不是通常的/
来界定正则表达式,因为我们正在尝试与表达式中的/
匹配,这可以节省我们一定程度的混淆逃避/
而头疼。
表达式/([^/]+)/$
。我们匹配文字/
,后跟一些非零数量的非/
字符,然后是另一个文字/
,后跟字符串$
的结尾。通过将匹配绑定到字符串的结尾,我们确保我们匹配的两个文字/
正好是输入中的最后一个和倒数第二个/
。
分组括号()
捕获两个/
之间的表达式,替换表达式\1
在替换期间将其替换回来。
答案 2 :(得分:0)
首先,找到最后一个位置:
$url = "http://www.foo.com/parentfoo/childfoo/";
$last = strrpos($url, '/');
if ($last === false) {
return false;
}
从那里,找到最后的第二个:
$next_to_last = strrpos($url, '/', $last - strlen($url) - 1);
$var1 = substr_replace($url,"",$last);
echo $var2 = substr_replace($var1, "#", $next_to_last, 1);
// http://www.foo.com/parentfoo#childfoo