0

これらの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);

それらをマージする正規表現文字列はどれですか?

4

2 に答える 2

5

後方参照を使用できます

[0-9]{4}([ -]|)([0-9]{4}\1){2}[0-9]{4}

これは、セパレータがすべての場合にのみ一致します

  • スペース
  • ハイフン
  • 空欄

\1これは、「これは、最初のキャプチャグループ(括弧内の式)が一致したものと正確に一致する」ことを意味します。

そのグループなので([ -]|)、パターンを一致させるには、他の両方のセパレーターが同じである必要があります。

あなたはそれをさらに単純化することができます:

\d{4}([ -]|)(\d{4}\1){2}\d{4}
于 2012-11-03T15:37:36.367 に答える
1

以下は、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})

(元の例では、スペースとハイフンの周りに不要な角かっこが含まれているようです)

于 2012-11-03T15:21:15.550 に答える