使用PHP替换字符串中的文本

时间:2016-02-11 13:48:17

标签: php replace find

我有这个字符串:

$my_string = "http://apinmo.com/1/2/3.jpg 4444/8888/7777  http://apinmo.com/4/5/8-1.jpg";

我需要删除网址的最后两个斜杠才能得到这个,其余的都保持不变:

$my_NEW_string = "http://apinmo.com/123.jpg 4444/8888/7777   http://apinmo.com/458-1.jpg";

我试过了:

$my_NEW_string = preg_replace('/(?<=\d)\/(?=\d)/', '', $my_string);

但我明白了:

$my_NEW_string = "http://apinmo.com/123.jpg 444488887777   http://apinmo.com/458-1.jpg";

4444/8888/7777中的斜线被移除,这不是我需要的。他们必须留在那里。

更新:由于使用此代码的上下文,我需要这种方法:在&#39; http&#39;之间进行替换和&#39; jpg&#39;

3 个答案:

答案 0 :(得分:3)

这是您可能使用的示例:

<?php

$my_string = "http://apinmo.com/1/2/3.jpg 4444/8888/7777 http://apinmo.com/4/5/8-1.jpg";
$my_array= split(" ",$my_string); // split it to 3 strings 
$part1=preg_replace('/(?<=\d)\/(?=\d)/', '', $my_array['0']);
$part2=$my_array['1'];
$part3=preg_replace('/(?<=\d)\/(?=\d)/', '', $my_array['2']);

$my_new_string=$part1." ".$part2." ".$part3;
?>

答案 1 :(得分:3)

这是另一种方法,可以保留你的空间:

$my_string = "http://apinmo.com/1/2/3.jpg 4444/8888/7777  http://apinmo.com/4/5/8-1.jpg";
$string_array = explode(' ', $my_string);
print_r($string_array); // for testing

$new_array = '';
foreach($string_array AS $original) {
    $pos = strpos($original, 'http');
    if(0 === $pos){
        $new = preg_replace('/(?<=\d)\/(?=\d)/', '', $original);
        $new_array[] = $new;
    } else {
        $new_array[] = $original;
    }
}
$new_string = implode(' ', $new_array);
echo $new_string;

返回(注意保留的空格):

http://apinmo.com/123.jpg 4444/8888/7777  http://apinmo.com/458-1.jpg

编辑 - 纯正则表达式方法:

$new_string = preg_replace('/(?<=\/\d)(\/)/', '', $my_string);
echo $new_string;

返回:http://apinmo.com/123.jpg 4444/8888/7777 http://apinmo.com/458-1.jpg

CAVEATS :     一个。 )即使字符串中有 no 空格也能正常工作     2.)如果/之间的任何数字长度超过一位数,则不起作用。   III。 )如果第二组数字类似于4444/5/8888,那么第二个斜杠也将被删除。

以下是正则表达式的分解:

使用正面的lookbehind匹配/后跟数字(?<=\/\d)我可以断言我要找的东西 - 我只想在之后删除正斜杠正斜杠后跟一个数字。因此,我可以在lookbehind之后立即用(\/)捕获其他正斜杠。无需包含http://开始或.jpg关闭。

答案 2 :(得分:0)

如果字符串始终有图像,您将获得$matches数组中的所有图像。

根据您的评论,您需要

  

这可能有所帮助:我只需要在'http'和'jpg'之间进行替换。

您可以根据要求使用数组进行替换。

$input = 'http://apinmo.com/123.jpg 4444/8888/7777   http://apinmo.com/458-1.jpg';
preg_match_all('(https?:\/\/\S+\.(?:jpg|png|gif))', $input, $matches);

echo '<pre>';print_r($matches);echo '</pre>';

输出:

 Array
(
    [0] => Array
        (
            [0] => http://apinmo.com/123.jpg
            [1] => http://apinmo.com/458-1.jpg
        )

)