preg_replace()只有字符串的特定部分

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)

这最终只留下我想要替换的部分,而不是实际替换它!

Ham*_*mZa 7

以下代码基于您提供的说明:

$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
  • $ :匹配行尾


cmb*_*ley 1

您可以通过简单的字符串替换来完成此操作:

$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)