我需要这样的网址:
https://www.domain.com/m/281/ [imagename] .jpg文件
并将其转换为:
http://www.NEWdomain.com/images/ [imagename] .jpg文件
我需要对很多网址执行此操作,因此我想编写一个快速的php脚本,将网址放入数组,然后循环更改域名并删除原始网址中的文件结构。并非所有原始网址都是/m/281
,但有些网址略有不同。
我认为我可以为str_replace
到https://www.domain.com
执行http://www.NEWdomain.com
,但我对如何将网址中的变化/m/281/
更改为我的文件结构感到困惑比如/images/
。
正则表达式最好能解决这个问题吗?
答案 0 :(得分:3)
explode("/", $urlString);
结果将是:
$arr[0] = www.NEWdomain.com
$arr[1] = [imagename].jpg
然后在最后一个元素“images”之前插入
结果将是:
$arr[0] = www.NEWdomain.com
$arr[1] = images
$arr[2] = [imagename].jpg
最终将其重新打包回字符串:
$blah = implode("/", $arr);
答案 1 :(得分:2)
为什么不尝试使用某些网址解析库,例如 - parse_url
然后获取每个组件并执行更简单的字符串替换。
答案 2 :(得分:1)
如果您想要更改所有路径中的所有图像网址,则此测试功能应该可以解决问题。
function fixurls($text) {
$re = '% # Match image urls in domain.com
https://www\.domain\.com/ # Required domain.
(?:[^\s/]+/)* # Optional pathname.
([^\s/]+\.jpe?g|png|gif) # $1: Filename (images only)
\b # Anchor to word boundary.
%xim';
// Fix all image URLs in $text string.
$replace = 'http://www.NEWdomain.com/images/$1';
$text = preg_replace($re, $replace, $text);
return $text;
}
如果您只想更改特定路径中的图像,则可以轻松修改正则表达式的路径部分。
答案 3 :(得分:0)
如果我没有对您的旧模式做出错误的假设,那么您的正则表达式可以匹配/[a-zA-Z]/[0-9]*/
。
答案 4 :(得分:0)
我认为你需要的是preg_replace()
。
答案 5 :(得分:0)
如果只有前两个子目录段是可变的,您可以尝试:
$src = preg_replace(
"~https?://www.domain.com/\w+/\d+/(.*?\.jpg)~" // match regex
"http://www.NEWdomain.com/images/$1", // replacement
$src);
\w
表示一个字母,\d+
表示匹配小数。 .*?
适用于几乎所有内容,因为您没有为文件名提供任何条件。
在替换字符串中,$1
刚刚变为以前与(
捕获)
parens匹配的内容。