0

经历另一个疯狂的网站迁移!

我有看起来像这样的 HTML img src url

http://blog.example.com/imagename.jpg

图像格式也可以是 jpg、png 或 gif

我们需要一个正则表达式来查找每个具有域的 url,然后是“/imagename.jpg”。

正则表达式非常新,表达式是什么?

4

2 回答 2

0

WordPress迁移的更好选择

如果您正在移动您的网站,并且您希望用新域替换对旧站点的所有引用,我建议您使用David Coveney 的 Serialized Search & Replace DB v2.1.0。您将希望在数据库的新副本上运行它,并且随时准备好备份。在目标服务器上导入数据库,然后运行该工具 - 您甚至不必上传服务器文件。

当我从开发服务器到实时域执行此操作时,我通常会进行两次搜索和替换:

一个用于 URL,非常基本:

Search: mywebsite.devserver.com
Replace: my-new-website.com

一个用于文件路径:

Search: /vhosts/devserver.com/mywebsite
Replace: /vhosts/my-new-website.com/httpdocs
(Note: This is assuming the majority of the file path is the same for both servers. Your search & replace paths may need to be more accurate)

需要序列化查找替换的原因是,有些数据是以 PHP 序列化格式存储的,如果你用文本编辑器或直接在 MySQL 中更改值,之后可能无法反序列化。


正则表达式答案

使用以下正则表达式模式选择由 blog.example.com 托管的图像:

((http|https)://blog\.example.com/[^ \r\n]+\.(jpg|jpeg|png|gif))

基本上搜索这个:http(s)://blog.example.com/*.(jpg/png/etc)

匹配以下示例中的 URL:

http://example.com/imagename.jpg
http://blog.example.com/imagename.jpg
http://blog.example.com/favicon.png
http://blog.example.com/uploads/2013/05/kitten.gif
https://blog.example.com/ssl-secure.png
This is my favorite gif https://blog.example.com/some-hilarious-image.gif hahaha

不符合以下任何一项:

blog.example.com/google.png
https://blog.google.com/google.png
our website is http://blog.example.com and has an image named /imagename.png
http://blog.example.com/

为什么它不匹配那些(按行):

Does not include http(s)://
Hosted by google
Paragraph text, where the URL is split into two parts
Not an image

$1返回图像的完整 URL。

我在RegexTester.com上对此进行了测试。您可以复制顶部字段中的模式,以及下面框中的所有示例。红色亮点是比赛。

于 2013-10-23T23:17:13.077 回答
0

Many good suggestions already, and why would a wordpress site hardcode domain name to links, but thats not our problem right now. If you need a regex then try this:

(?<=<img).+(?<=src=["'])(.+(?:jpe?g|gif|png))

EXPLAINED:

(?<=<img).+(?<=src=["']) - be sure we're inside an <img> tag up to src attribute
(.+(?:jpe?g|gif|png)) capture everything up to required extension
于 2013-10-24T00:14:39.300 回答