正規表現でオプションの文字を一致させる方法 質問する

正規表現でオプションの文字を一致させる方法 質問する

今まで正しく動作していたと思っていた正規表現があります。オプションの文字に一致させる必要があります。その文字は存在する場合もあれば、存在しない場合もあります。

ここに 2 つの文字列があります。上の文字列は一致しますが、下の文字列は一致しません。下の文字列に 1 文字もないため、失敗します。

最初の 5 桁の数字の後に 1 文字がある場合はそれを取得し、ない場合は文字列の残りの部分を取得し続けます。この文字は ですA-Z

正規表現から削除すると([A-Z]{1}) +.*? +、文字以外の必要なものはすべて一致しますが、文字は重要です。

20000      K               Q511195DREWBT            E00078748521
30000                      K601220PLOPOH            Z00054878524

私が使用している正規表現は次のとおりです。

/^([0-9]{5})+.*? ([A-Z]{1}) +.*? +([A-Z]{1})([0-9]{3})([0-9]{3})([A-Z]{3})([A-Z]{3}) +([A-Z])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2})/

ベストアンサー1

使用

[A-Z]?

文字をオプションにするには、 を使用します。{1}は冗長です。 (もちろん、[A-Z]{0,1}which と書いても同じ意味になりますが、 はその?ためにあるのです。)

正規表現を次のように改善することができます

^([0-9]{5})+\s+([A-Z]?)\s+([A-Z])([0-9]{3})([0-9]{3})([A-Z]{3})([A-Z]{3})\s+([A-Z])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2})

そして、ほとんどの正規表現方言では、\dは と同じです[0-9]

^(\d{5})+\s+([A-Z]?)\s+([A-Z])(\d{3})(\d{3})([A-Z]{3})([A-Z]{3})\s+([A-Z])\d{3}(\d{4})(\d{2})(\d{2})

しかし、本当に 11 個の個別のキャプチャ グループが必要ですか? もしそうなら、最後から 4 番目の数字のグループをキャプチャしないのはなぜですか?

おすすめ記事