これらの3つの正規表現があります。それらは個別に機能しますが、単一のパターンでそれらをマージしたいと思います。
regex1 = [0-9]{16}
regex2 = [0-9]{4}[-][0-9]{4}[-][0-9]{4}[-][0-9]{4}
regex3 = [0-9]{4}[ ][0-9]{4}[ ][0-9]{4}[ ][0-9]{4}
私はこの方法を使用します:
Pattern.compile(regex);
それらをマージする正規表現文字列はどれですか?
後方参照を使用できます:
[0-9]{4}([ -]|)([0-9]{4}\1){2}[0-9]{4}
これは、セパレータがすべての場合にのみ一致します
\1
これは、「これは、最初のキャプチャグループ(括弧内の式)が一致したものと正確に一致する」ことを意味します。
そのグループなので([ -]|)
、パターンを一致させるには、他の両方のセパレーターが同じである必要があります。
あなたはそれをさらに単純化することができます:
\d{4}([ -]|)(\d{4}\1){2}\d{4}
以下は、3つのパターンが一致するものと一致する必要があります。
regex = [0-9]{4}[- ]?[0-9]{4}[- ]?[0-9]{4}[- ]?[0-9]{4}
つまり、数字の間にハイフン、スペース、または何もないことに満足していると思いますか?
注:これは、3つの組み合わせがある状況にも一致します。
0000-0000 00000000
どちらが望ましくないかもしれませんか?
または、3つの個別のパターンのいずれかを一致させる必要がある場合は、|
次のように、それらをと連結します。
([0-9]{16})|([0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4})|([0-9]{4} [0-9]{4} [0-9]{4} [0-9]{4})
(元の例では、スペースとハイフンの周りに不要な角かっこが含まれているようです)