更换和删除部分字符串

时间:2014-04-14 19:27:38

标签: php

我有一个由如下网址组成的字符串:http://www.foo.com/parentfoo/childfoo/我希望将其转换为http://www.foo.com/parentfoo#childfoo

删除最后两个'的最佳方法是什么? /'并取代倒数第二个' /'用' #'?

3 个答案:

答案 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. 表达式/([^/]+)/$。我们匹配文字/,后跟一些非零数量的非/字符,然后是另一个文字/,后跟字符串$的结尾。通过将匹配绑定到字符串的结尾,我们确保我们匹配的两个文字/正好是输入中的最后一个和倒数第二个/

  3. 分组括号()捕获两个/之间的表达式,替换表达式\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