regex 匹配特定长度x或y

p4tfgftt  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(92)
  • 我想要一个长度为X或Y个字符的正则表达式 *。例如,匹配一个长度为8或11个字符的字符串。我目前已经实现了这样的:^([0-9]{8}|[0-9]{11})$

我也可以将其实现为:^[0-9]{8}([0-9]{3})?$
我的问题是:我可以在不复制[0-9]部分的情况下使用这个正则表达式吗(这比这个简单的\d示例更复杂)?

czq61nw1

czq61nw11#

只有一个办法:

^(?=[0-9]*$)(?:.{8}|.{11})$

字符串
或者,如果你想先检查长度,

^(?=(?:.{8}|.{11})$)[0-9]*$


这样,复杂的部分就只有一次,而一般的.用于长度检查。

说明:

^       # 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

ct3nt3jp

ct3nt3jp2#

对于我们这些希望捕捉相同倍数的不同长度的人来说,试试这个。
第一个月
其中32是您想要捕获(32,64,96,...)的所有长度的倍数。

2ul0zpep

2ul0zpep3#

使用Perl,你可以:

my $re = qr/here_is_your_regex_part/;
my $full_regex = qr/$re{8}(?:$re{3})?$/

字符串

相关问题