我有一个文件,其中包含不同的 HTML 标签,并且多个 img src URL 分布在其中:
<img src="https://www.example.com/parent-folder-1/subfolder-1/image1.png">
<img src="https://www.example.com/parent-folder-2/subfolder-2/image2.png">
...
<img src="https://www.example.com/parent-folder-100/subfolder-100/image100.png">
我提到的parent-folder-N
只是为了有个想法,这些 URL 没有特定的模式,它们可能都有不同的子文件夹,但它们开头的 URL 与源相同https://www.example.com/
我试图https://www.example.com/parent-folder-N/subfolder-N/imageN.png
用本地路径替换所有提及的内容imageN.png
,因此所有这些都将变为:
<img src="image1.png">
<img src="image2.png">
...
<img src="image100.png">
所以基本上它会查看完整的 URL 路径,并且只保留最后一个 slug,即imageN.png
.
例如,这些是我尝试使用 Regex 查找https://i.imgur.com/u9JgF6B.png
并替换为的 URL 部分[nothing]
,因此最终我只剩下imageN.png
slugs。
是否有可能使用正则表达式来完成此任务?
PS:我尝试使用像这样的正则表达式,^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]example+)\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$
这与 example.com 匹配,但我不知道如何匹配最后example.com/...
一个/
之前的URL 路径imageN.png
PPS:图像始终可以具有扩展名.png
或.jpg
答案1
我不知道你的意思使用正则表达式但这是如何做到这一点的sed
:
sed 's!https://www.example.com/.*/!!' file.html
或者(假设您的链接不包含字符!
):
sed '/https:\/\/www.example.com\//{y@/@|@;s/".*|/"/}' test
使用-i
选项(在 中可用Gnu sed
)将更改应用到 html 文件。
和perl
:
perl -pe 's@(?:https://www.example.com/.*/)(.*[.])(png|jpg)@$1$2@' test.html
perl
可以-i
选择直接在文件中启用编辑。
答案2
到目前为止,我不是正则表达式方面的专家,但这应该有效:
(http).*\/
解释
(http)
匹配字符串“http”
.*
匹配任何字符 0 次或多次,直到
\/
匹配最后一个斜杠。