php - preg_replace() 仅字符串的特定部分

标签 php regex replace preg-replace

我总是有正则表达式的麻烦,我基本上有一个 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

解释:

  • ^ : 匹配行首
  • ( : 开始匹配组 1
    • https?:// : 匹配http或https协议(protocol)
    • [^/]+ :匹配除/之外的任何内容一次或多次
    • / :匹配 /
  • ) : 结束匹配组1
  • [^/]+ :匹配除 / 之外的任何内容一次或多次 -/ : 匹配/
  • ( : 开始匹配第2组
    • .* :匹配任何零次或多次(贪婪)
  • ) : 结束匹配组2
  • $ : 匹配行尾

关于php - preg_replace() 仅字符串的特定部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17852537/

相关文章:

java - 在字符串中找到一个 6 位数字

php - RegEx 从 PHP 7.4 开始失败,在 7.3 中工作

用于空格分隔数字且小数部分包含两位数字的正则表达式模式

Javascript - 如何从 location.href 中删除 .com 或 .net 或 .org

php - 使 curl_multi 'sleep' 或等待发送下一个请求

php - PHP 的 HTTP 身份验证究竟是如何工作的?

php - 如何每行设置 4 个元素? (PHP/HTML/CSS) 非表格

MYSQL 类似替换不起作用

javascript - 如何从给定字符串中删除带有额外分隔符的单词?

php - 多个 ng-options 下拉菜单无法正常工作?