正则表达式删除 URL 路径并保留 URL 的最后一个片段

正则表达式删除 URL 路径并保留 URL 的最后一个片段

我有一个文件,其中包含不同的 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.pngslugs。

是否有可能使用正则表达式来完成此任务?

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 次或多次,直到

\/匹配最后一个斜杠。

相关内容