我总是有正则表达式的麻烦,我基本上有一个 url,例如:
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]);
这最终只留下我想替换的部分,而不是实际替换它!
最佳答案
以下代码基于您提供的描述:
$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
解释:
^
: 匹配行首(
: 开始匹配组 1https?://
: 匹配http或https协议(protocol)[^/]+
:匹配除/
之外的任何内容一次或多次/
:匹配/
)
: 结束匹配组1[^/]+
:匹配除/
之外的任何内容一次或多次 -/
: 匹配/
(
: 开始匹配第2组.*
:匹配任何零次或多次(贪婪)
)
: 结束匹配组2$
: 匹配行尾
关于php - preg_replace() 仅字符串的特定部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17852537/