duanqiao2225 2019-01-27 01:37
浏览 47
已采纳

建议更优雅的解决方案来替换URL中的1个字符

So, I have a URL I am receiving via an API. The pattern would be similar to https://www.example.co.uk/category/000000000k/0000

I want to replace the second k character, with a x char.

I tried using str_replace() but it also replaces the first k character.

So what I did was use preg_split(), so my solution is:

$url = preg_split( '/[\/]+/', 'https://www.example.co.uk/category/000000000k/0000' );
$url = $url[0] . '//' . $url[1] . '/' . $url[2] . '/' . str_replace( 'k', 'x', $url[3] ) . '/' . $url[4];

So, my solution works are long as the URL pattern does not change. However, I think it could be more elegant if my Regex was up to par.

Anyone here could point me to a better path?

  • 写回答

2条回答 默认 最新

  • douguizhuang8276 2019-01-27 10:20
    关注

    If k/ always have numbers before that and another part doesn't have same pattern, this may work.

    $url = "https://www.example.co.uk/category/000000000k/0000";
    $url = preg_replace("/([0-9])k\//", "$1x/", $url);
    

    Anoter pattern. Find 3rd /, make sub string, and replace.

    $url = "https://www.example.co.uk/category/000000000k/0000";
    
    $pos = 0;
    for ($i = 0; $i < 3; $i++) {
        $pos = strpos($url, "/", $pos);
        if (FALSE === $pos) {
            // error
            break;
        }
        $pos++;
    }
    
    if ($pos) {
        $url_tmp = substr($url, $pos);
        $url_tmp = str_replace("k/", "x/", $url_tmp);
        $url = substr($url, 0, $pos).$url_tmp;
    } else {
        // $pos is 0 or FALSE
        // error
    }
    

    If url source is not reliable, more checks may be needed.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)