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パスを見て、最後のスラグですimageN.png

たとえば、これはRegexを使用してhttps://i.imgur.com/u9JgF6B.png見つけて置き換えようとするURLの一部であるため、[nothing]最終的にはスラグだけが残りますimageN.png

これを行うために正規表現を使用できますか?

PS:このような正規表現を使ってみましたが、example.comと一致しましたが、最後のパスの前のURLを^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]example+)\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$一致させる方法がわかりません。example.com/.../imageN.png

PPS:画像は常に拡張子を持つことができます.png.jpg

答え1

私はあなたが何を意味するのかわかりません。正規表現の使用ただし、これを行う方法は次のとおりですsed

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

または(リンクに文字がないと仮定!):

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

htmlファイルに変更を適用するには、-iオプション(で利用可能)を使用します。Gnu sed


そしてperl

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

perl-iファイルから直接編集を有効にするオプションがあります。

答え2

現時点では正規表現の専門家ではありませんが、次のようにすると機能します。

(http).*\/


説明する

(http)文字列「http」と一致します。

.*次に、ランダムな文字を0回以上一致させます。

\/最後のスラッシュと一致します。

関連情報