Gle*_*len 6 php regex replace preg-replace
我一直有正则表达式的麻烦,我基本上有一个网址,例如:
http://somedomain.com/something_here/bla/bla/bla/bla.jpg
我需要的是一个preg_replace()来替换something_here一个空字符串,并保留其他所有内容.
我尝试了以下内容,它取代了错误的部分:
$image[0] = preg_replace('/http:\/\/(.*)\/(.*)\/wp-content\/uploads\/(.*)/','$2' . '',$image[0]);
Run Code Online (Sandbox Code Playgroud)
这最终只留下我想要替换的部分,而不是实际替换它!
以下代码基于您提供的说明:
$url = 'http://somedomain.com/something_here/bla/bla/bla/bla.jpg';
$output = preg_replace('#^(https?://[^/]+/)[^/]+/(.*)$#', '$1$2', $url);
echo $output; // http://somedomain.com/bla/bla/bla/bla.jpg
Run Code Online (Sandbox Code Playgroud)
说明:
^ :匹配行的开头( :开始匹配组1
https?:// :匹配http或https协议[^/]+:除了/一次或多次匹配任何东西/ : 比赛 /) :结束匹配组1[^/]+:除了/一次或多次匹配任何东西- /:匹配/( :开始匹配组2
.* :匹配任何零次或多次(贪婪)) :结束匹配组2$ :匹配行尾您可以通过简单的字符串替换来完成此操作:
$image[0] = str_replace('/wp-content/uploads/', '/', $image[0]);
Run Code Online (Sandbox Code Playgroud)
或者,如果您想使用正则表达式:
$image[0] = preg_replace('~(http://.*?)/wp-content/uploads/(.*)~', '$1/$2', $image[0]);
Run Code Online (Sandbox Code Playgroud)