使用 PHP 替换字符串中的文本
Replace text in a string using PHP
我有这个字符串:
$my_string = "http://apinmo.com/1/2/3.jpg 4444/8888/7777 http://apinmo.com/4/5/8-1.jpg";
我需要删除 url 的最后两个斜杠才能得到这个,其余的都保持不变:
$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
中的斜杠已删除,这不是我需要的。他们必须留在那里。
UPDATE:由于使用此代码的上下文,我需要这种方法:在 'http' 和 'jpg' 之间进行替换
这是您可能会使用的示例:
<?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;
?>
如果字符串始终包含图像,您将获得 $matches
数组中的所有图像。
根据您的评论需要
This could help: I only need to make replacements between 'http' and '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
)
)
还有另一种方法可以做到这一点并保留您的空间:
$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;
Returns(注意保留的空格):
http://apinmo.com/123.jpg 4444/8888/7777 http://apinmo.com/458-1.jpg
编辑 - 纯正则表达式方法:
$new_string = preg_replace('/(?<=\/\d)(\/)/', '', $my_string);
echo $new_string;
Returns: http://apinmo.com/123.jpg 4444/8888/7777 http://apinmo.com/458-1.jpg
注意事项:
一种。 ) 即使字符串中有 no 空格也有效
2. ) 如果 /
之间的任何数字长度超过一位数,则不起作用。
三. ) 如果第二组数字像 4444/5/8888
第二个斜杠也会在这里被删除。
正则表达式的分解方式如下:
使用正后向匹配 /
后跟数字 (?<=\/\d)
我可以断言我正在寻找的东西 - 我只想删除正斜杠 after 一个正斜杠后跟一个数字。因此,我可以在回顾后立即使用 (\/)
捕获其他正斜杠。无需包含 http://
开始或 .jpg
结束。
我有这个字符串:
$my_string = "http://apinmo.com/1/2/3.jpg 4444/8888/7777 http://apinmo.com/4/5/8-1.jpg";
我需要删除 url 的最后两个斜杠才能得到这个,其余的都保持不变:
$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
中的斜杠已删除,这不是我需要的。他们必须留在那里。
UPDATE:由于使用此代码的上下文,我需要这种方法:在 'http' 和 'jpg' 之间进行替换
这是您可能会使用的示例:
<?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;
?>
如果字符串始终包含图像,您将获得 $matches
数组中的所有图像。
根据您的评论需要
This could help: I only need to make replacements between 'http' and '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
)
)
还有另一种方法可以做到这一点并保留您的空间:
$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;
Returns(注意保留的空格):
http://apinmo.com/123.jpg 4444/8888/7777 http://apinmo.com/458-1.jpg
编辑 - 纯正则表达式方法:
$new_string = preg_replace('/(?<=\/\d)(\/)/', '', $my_string);
echo $new_string;
Returns: http://apinmo.com/123.jpg 4444/8888/7777 http://apinmo.com/458-1.jpg
注意事项:
一种。 ) 即使字符串中有 no 空格也有效
2. ) 如果 /
之间的任何数字长度超过一位数,则不起作用。
三. ) 如果第二组数字像 4444/5/8888
第二个斜杠也会在这里被删除。
正则表达式的分解方式如下:
使用正后向匹配 /
后跟数字 (?<=\/\d)
我可以断言我正在寻找的东西 - 我只想删除正斜杠 after 一个正斜杠后跟一个数字。因此,我可以在回顾后立即使用 (\/)
捕获其他正斜杠。无需包含 http://
开始或 .jpg
结束。