簡體   English   中英

替換和刪除字符串的一部分

[英]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. 首先,我們使用!分隔正則表達式! 而不是通常的/因為我們試圖去匹配/表達,這為我們節省了一定的混亂和頭痛與逃逸的內部/

  2. 表達式/([^/]+)/$ 我們匹配一個文字/ ,后面跟着一些非零個數的非/字符,然后是另一個文字/ ,后面跟着字符串$ 通過把比賽進行到字符串的結尾,我們確保這兩個文本/我們匹配的是精確的最后一個和第二個到最后/輸入。

  3. 分組括號()捕獲兩個/之間的表達式,替換表達式\\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM