Regular-Expression

正則表達式刪除 URL 路徑並保留 URL 的最後一個 slug

  • March 5, 2022

我有一個文件,其中包含不同的 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 沒有特定的模式,它們可能都有不同的子文件夾,但它們在開始時具有與源相同的 URLhttps://www.example.com/

我正在嘗試https://www.example.com/parent-folder-N/subfolder-N/imageN.png用 local path替換所有提及的內容imageN.png,因此所有這些都將變為:

<img src="image1.png">

<img src="image2.png">
...
<img src="image100.png">

所以基本上它會查看完整的 URL 路徑,並且只保留最後一個imageN.png.

例如,這些是我試圖用正則表達式查找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 匹配,但我不知道如何匹配之後的 URL 路徑,example.com/...直到最後一個/之前imageN.png

PPS:圖像總是可以有副檔名.png.jpg

我不知道你對使用正則表達式的意思,但這是如何做到這一點的sed

sed 's!https://www.example.com/.*/!!' file.html

或者(假設您的連結不包含一個!字元):

sed '/https:\/\/www.example.com\//{y@/@|@;s/".*|/"/}' test

使用-i選項 (Availabe in Gnu sed) 將更改應用到 html 文件。


perl

perl -pe 's@(?:https://www.example.com/.*/)(.*[.])(png|jpg)@$1$2@' test.html

perl可以-i選擇直接在文件中啟用編輯。

到目前為止,我還不是正則表達式的專家,但這應該可行:

(http).*\/


解釋

(http)匹配字元串“http”

.*匹配任何字元 0 次或更多次,直到

\/匹配最後一個斜杠。

引用自:https://unix.stackexchange.com/questions/691165