2023年5月19日金曜日

Python で docker のイメージ名をバリデーションする正規表現

Python で docker のイメージ名をバリデーションする正規表現

概要

結構難しいです

環境

  • 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 件のコメント:

コメントを投稿