[英]Replacing and removing parts of a string
我有一個由以下網址組成的字符串: http://www.foo.com/parentfoo/childfoo/
: http://www.foo.com/parentfoo/childfoo/
,我想將其轉換為http://www.foo.com/parentfoo#childfoo
刪除最后兩個“ /”並將倒數第二個“ /”替換為“#”的最佳方法是什么?
首先刪除最后一個斜杠,然后用哈希替換最后一個斜杠
<?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
這是使用regex
查找最后一個/
的解決方案。
<?php
$url = 'http://www.foo.com/parentfoo/childfoo/';
$output = preg_replace('!/([^/]+)/$!', "/#\\1", $url);
echo $output."\n";
?>
這是有關其工作原理的一些解釋。
首先,我們使用!
分隔正則表達式!
而不是通常的/
因為我們試圖去匹配/
表達,這為我們節省了一定的混亂和頭痛與逃逸的內部/
。
表達式/([^/]+)/$
。 我們匹配一個文字/
,后面跟着一些非零個數的非/
字符,然后是另一個文字/
,后面跟着字符串$
。 通過把比賽進行到字符串的結尾,我們確保這兩個文本/
我們匹配的是精確的最后一個和第二個到最后/
輸入。
分組括號()
捕獲兩個/
之間的表達式,替換表達式\\1
在替換過程中將其替換回。
首先,找到最后一個位置:
$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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.