[解決済み] バージョン番号解析のための正規表現
2023-01-06 11:26:12
質問
以下のフォームのバージョン番号を持っています。
バージョン.リリース.モディフィケーション
ここで、version、release、modificationは数字か'*'ワイルドカード文字です。さらに、これらの数字(およびその前の.)のいずれかが欠けていてもかまいません。
したがって、以下は有効であり、次のようにパースされます。
1.23.456 = version 1, release 23, modification 456
1.23 = version 1, release 23, any modification
1.23.* = version 1, release 23, any modification
1.* = version 1, any release, any modification
1 = version 1, any release, any modification
* = any version, any release, any modification
しかし、これらは有効ではありません。
*.12
*123.1
12*
12.*.34
リリース番号、バージョン番号、修正番号を検証して取得するための、あまり複雑でない正規表現をどなたか教えてください。
どのように解決するのですか?
という形式で表現します。
1-3個のドット区切りで、最後の1個が*"になることを除けば、それぞれ数字です。
正規表現としては
^(\d+\.)?(\d+\.)?(\*|\d+)$
[追記:この解決策は簡潔な検証方法ですが、値の抽出に余分な作業が必要であることが指摘されています。正規表現を複雑にすることで対処するか、マッチしたグループを処理することで対処するかは、好みの問題です。
私のソリューションでは、グループは
"."
文字を捕捉してしまいます。これは、ajborley の回答のように、捕捉しないグループを使用して対処することができます。
また、右端のグループは、コンポーネントが3つ以下であっても最後のコンポーネントをキャプチャするため、例えば2コンポーネントの入力では、最初と最後のグループがキャプチャされ、真ん中のグループは未定義になります。これは、サポートされている場合、非貪欲なグループによって対処できると思います。
正規表現の後で両方の問題に対処するための Perl コードは、次のようなものになるでしょう。
@version = ();
@groups = ($1, $2, $3);
foreach (@groups) {
next if !defined;
s/\.//;
push @version, $_;
}
($major, $minor, $mod) = (@version, "*", "*");
で分割するよりも短くなることはありません。
"."
]
関連
-
[解決済み] 正規表現の末尾にある中括弧内のカンマ区切りの数字は何を意味するのですか?
-
[解決済み] この文字にマッチしない」という意味の正規表現演算子はどれ?
-
[解決済み] RegexにおけるOR条件
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] 正規表現を使用した電話番号の検証方法
-
[解決済み] JSで文字列が正規表現にマッチするかどうかをチェックする
-
[解決済み] nodejsのコードでpackage.jsonからバージョンを取得する方法はありますか?
-
[解決済み】Homebrewは特定のバージョンのformulaをインストールしますか?
-
[解決済み】アクセント記号付き文字(ダイアクリティック)の具体的なJavaScript正規表現について)
-
[解決済み] Javaプロジェクトのビルドとバージョン番号付け (ant、cvs、hudson)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Regex オプション文字にマッチさせる方法
-
[解決済み] XPathのcontains関数で正規表現を使用する方法
-
[解決済み] (grep) 非 ASCII 文字にマッチする正規表現ですか?
-
[解決済み] SQLite のクエリで正規表現を使うにはどうしたらいいですか?
-
[解決済み] what meas this regex (.*1) [duplicate] (重複)
-
[解決済み] 文字列の完全一致のための正規表現
-
[解決済み] 正規表現は、文字列がターゲットで終わる場合にのみマッチします。
-
[解決済み] Powershellで完全一致の文字列のみを置換する
-
[解決済み] 郵便番号の正規表現
-
[解決済み] 2つ以上の連続した文字を検索するためのRegEx