我总是遇到正则表达式的问题,我基本上有一个网址,例如:
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]);
这最终只留下我想要替换的部分,而不是实际替换它!
答案 0 :(得分: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
<强>解释强>
^
:匹配行的开头(
:开始匹配第1组
https?://
:匹配http或https协议[^/]+
:匹配除/
以外的任何内容/
:匹配/
)
:结束匹配组1 [^/]+
:匹配除/
以外的任何内容一次或多次
- /
:匹配/
(
:开始匹配第2组
.*
:匹配任何零次或多次(贪婪))
:结束匹配组2 $
:匹配行尾答案 1 :(得分:2)
你可以这样做:
$image[0] = preg_replace('!^(http://[^/]*)/[^/]*!', '$1', $image[0]);
或者您可以考虑将字符串拆分为适用于其各个组件:
$parts = explode('/', $image[0]);
unset($parts[3]);
$image[0] = implode('/', $parts);
答案 2 :(得分:1)
您可以使用简单的字符串替换来执行此操作:
$image[0] = str_replace('/wp-content/uploads/', '/', $image[0]);
或者如果你想使用正则表达式:
$image[0] = preg_replace('~(http://.*?)/wp-content/uploads/(.*)~', '$1/$2', $image[0]);