概要
結構難しいです
環境
- macOS 11.7.6
- Python 3.10.9
正規表現
^(?:(?=[^:\/]{4,253})(?!-)[a-zA-Z0-9-]{1,63}(?<!-)(?:\.(?!-)[a-zA-Z0-9-]{1,63}(?<!-))*(?::[0-9]{1,5})?/)?((?![._-:])(?:[a-z0-9._-]*)(?<![._-])(?:/(?![._-])[a-z0-9._-]*(?<![._-]))*)(?::(?![.-])[a-zA-Z0-9_.-]{1,128})?$
パーツごとに説明
^
(?: # プロトコルとドメインの部分
(?=[^:\/]{1,253}) # ドメインが253文字以下であることを確認
(?!-)[a-zA-Z0-9-]{1,63}(?<!-) # ドメインの最初と最後にハイフンがないことを確認
(?:\.(?!-)[a-zA-Z0-9-]{1,63}(?<!-))* # ドメインの各部分が最初と最後にハイフンがないことを確認
(?::[0-9]{1,5})? # ポート番号がある場合にマッチ
/ # ドメインとパスの区切りを表すスラッシュ
)?
( # パスの部分
(?![:._-]) # パスがコロン、ハイフン、ピリオド、アンダースコアで始まらないことを確認
(?:[a-z0-9._-]*) # パスの部分に含まれる文字列
(?<![._-]) # パスがハイフン、ピリオド、アンダースコアで終わらないことを確認
(?:/(?![._-])[a-z0-9._-]*(?<![._-]))* # イメージ名
)
(?::(?![.-])[a-zA-Z0-9_.-]{1,128})? # オプションでタグ名
$
0 件のコメント:
コメントを投稿