Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php-用另一个字符串的一部分替换字符串的一部分_Php_String_Str Replace - Fatal编程技术网

php-用另一个字符串的一部分替换字符串的一部分

php-用另一个字符串的一部分替换字符串的一部分,php,string,str-replace,Php,String,Str Replace,我一直在四处寻找这个,但这是我找不到的 我想替换以下字符串的粗体部分: /虚拟/公共/管理/内容/编辑/2 如果它与以下字符串的任何部分匹配: 您可以看到/pano\u virtual/public/部分匹配,如果匹配,我想将其从第一个字符串中删除 我不能使用simle str_替换,因为两个字符串都会随着不同的服务器和不同的网站而改变,但第一个字符串的第一部分始终与第二个字符串的最后一部分匹配 可能吗 非常感谢 编辑-已解决!: 我设法找到了答案,但这不是最好的解决方案,但它确实有效: //

我一直在四处寻找这个,但这是我找不到的

我想替换以下字符串的粗体部分:

/虚拟/公共/管理/内容/编辑/2

如果它与以下字符串的任何部分匹配:

您可以看到/pano\u virtual/public/部分匹配,如果匹配,我想将其从第一个字符串中删除

我不能使用simle str_替换,因为两个字符串都会随着不同的服务器和不同的网站而改变,但第一个字符串的第一部分始终与第二个字符串的最后一部分匹配

可能吗

非常感谢

编辑-已解决!:

我设法找到了答案,但这不是最好的解决方案,但它确实有效:

// $_SERVER['REQUEST_URI'] is the first string
// URL_ROOT is the second string

$url_root_substring = '';
$root_count = strlen(URL_ROOT);
$start = 0;
while($start < $root_count) {
    $substring = substr(URL_ROOT.'/',$start,$root_count);
    if($substring == substr($_SERVER['REQUEST_URI'],0,strlen($substring))) {
        $url_root_substring = $substring;
        break;
    }
    $start++;
}
/$\u服务器['REQUEST\u URI']是第一个字符串
//URL\u ROOT是第二个字符串
$url_root_substring='';
$root\u count=strlen(URL\u root);
$start=0;
而($start<$root\u count){
$substring=substr(URL_ROOT.'/',$start,$ROOT_count);
如果($substring==substr($\u服务器['REQUEST\u URI'],0,strlen($substring))){
$url\u root\u substring=$substring;
打破
}
$start++;
}

在我看来,您似乎在尝试匹配路径,而不是字符串。我猜你不会想要
http://host/foobar
匹配
barcamp/任何内容

因此,我建议在“/”上拆分字符串。然后,只需在“http”数组上迭代,从“path”数组中查找第一个元素。如果找到匹配项,则前进到第二个元素,以此类推。如果两个元素不匹配,则重置为“path”数组的开头。如果到达“http”数组的末尾,并且最后一个元素匹配,那么就有了最长的公共路径(如果没有,那么就没有任何公共路径)

输出:

answer: /admin/content/edit/2

“我想替换以下字符串的粗体部分…”什么粗体部分?请适当设置问题的格式。如果有多种匹配方法,是否希望最长的匹配?例如
/a/b/a/c
http://localhost/a/b/a/
可以变成
http://localhost/a/b/a/b/a/c
http://localhost/a/b/a/c
。那么您想删除第一个字符串的最长前缀,同时也是第二个字符串的后缀吗?很抱歉,问题的格式不正确。是的,乔恩,这正是我所需要的-我该怎么做呢?那么。。。
answer: /admin/content/edit/2