XまたはY文字の長さの正規表現が欲しいのですが。たとえば、8文字または11文字の長さの文字列に一致します。私は現在、次のようにこれを実装しています^([0-9]{8}|[0-9]{11})$
。
次のように実装することもできます。^[0-9]{8}([0-9]{3})?$
私の質問は、パーツを複製せずにこの正規表現を使用できますか[0-9]
(これはこの単純な例よりも複雑\d
です)?
XまたはY文字の長さの正規表現が欲しいのですが。たとえば、8文字または11文字の長さの文字列に一致します。私は現在、次のようにこれを実装しています^([0-9]{8}|[0-9]{11})$
。
次のように実装することもできます。^[0-9]{8}([0-9]{3})?$
私の質問は、パーツを複製せずにこの正規表現を使用できますか[0-9]
(これはこの単純な例よりも複雑\d
です)?
1つの方法があります:
^(?=[0-9]*$)(?:.{8}|.{11})$
または、最初に長さチェックを実行する場合は、
^(?=(?:.{8}|.{11})$)[0-9]*$
そうすれば、複雑な部分は1回だけ.
で、長さチェックの一般的な部分になります。
説明:
^ # Start of string
(?= # Assert that the following regex can be matched here:
[0-9]* # any number of digits (and nothing but digits)
$ # until end of string
) # (End of lookahead)
(?: # Match either
.{8} # 8 characters
| # or
.{11} # 11 characters
) # (End of alternation)
$ # End of string
Perlを使用すると、次のことができます。
my $re = qr/here_is_your_regex_part/;
my $full_regex = qr/$re{8}(?:$re{3})?$/
同じ倍数の異なる長さをキャプチャしたい私たちの場合は、これを試してください。
^(?:[0-9]{32})+$
32
(32、64、96、...)のすべての長さをキャプチャする倍数はどこにありますか。