41

XまたはY文字の長さの正規表現が欲しいのですが。たとえば、8文字または11文字の長さの文字列に一致します。私は現在、次のようにこれを実装しています^([0-9]{8}|[0-9]{11})$

次のように実装することもできます。^[0-9]{8}([0-9]{3})?$

私の質問は、パーツを複製せずにこの正規表現を使用できますか[0-9](これはこの単純な例よりも複雑\dです)?

4

3 に答える 3

64

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
于 2012-10-08T15:10:44.613 に答える
2

Perlを使用すると、次のことができます。

my $re = qr/here_is_your_regex_part/;
my $full_regex = qr/$re{8}(?:$re{3})?$/
于 2012-10-08T15:10:42.413 に答える
2

同じ倍数の異なる長さをキャプチャしたい私たちの場合は、これを試してください。

^(?:[0-9]{32})+$

32(32、64、96、...)のすべての長さをキャプチャする倍数はどこにありますか。

于 2018-02-06T10:37:56.227 に答える