2017-11-04 23 views
0

パッチ(または3桁目)がオプションの正規表現とセマンティックバージョンをマッチさせようとしています。私はこの作業のほとんどを持っていますが、最後のオプションの数字は私のグループで一致しません。私はバージョンを一致させるためにしようとしているhttps://regex101.com/r/ZuitFG/3セマンティックバージョンと正規表現のマッチング

例である/Release (\d+\.\d+[\.\d]?)/

Release 2.6 Now Live 
Release 12.46.30 Now Live 
Release 2.6.0 Now Live 
Release 2.6.1 Now Live 

、それだけでx.x.にマッチし、決して数字の最後のセットが含まれています。私はこの正規表現が何度か何をするのかの説明を再度読んだので、私が間違っていることを見ることができません。

+1

'[\。\ d]'はドットを1桁で表すことを意味します - ドットをマッチさせるオプションの非捕捉グループである '(?:\。\ d +)? '無限の時間に。 – h2ooooooo

+0

'[...]'は常に1文字に一致します。 – melpomene

答えて

2

[\.\d]?は、任意ので、.または数字、1回または0回のいずれかと一致します。

これは、数字とドットの2つのシーケンスの後に. +数字のシーケンスがあった場合、ドットのみが一致したためです。

grouping constructを使用する必要があります。 non-capturing groupそれは、他のサブグループを作成しませんので、ここでは最高のようだ:

Release (\d+\.\d+(?:\.\d+)?) 
       ^^^^^^^^^ 

regex demoを参照してください。

(?:\.\d+)?は、オプションの(1回または0回)のシーケンス.と一致し、その後1桁に一致します。

関連する問題