一系列数字的正则表达式

Regular expression for a range of numbers

本文关键字:正则表达式 数字 一系列      更新时间:2024-03-23

我试图做一个正则表达式,但不能很好地理解。

我想要的是输入以下内容:

09XYZZZZZZ

其中X是从6到9,Y是从1到9,Z是从0到9。加在一起,只有12位数的长度。

谢谢!

解决方案在很大程度上取决于所用正则表达式的类型。例如,在Perl正则表达式中,您可以编写:

/09[6-9][1-9][0-9]{6}/

这与字符串09完全匹配,然后是从6到9的一位数字,然后是1到9的1位数字,最后是从0到9的6位数字。

在POSIX正则表达式中,{6}表示法不存在。你必须在那里重复这个范围6次。

请注意,你的示例模式只有10位数,而你的描述是12位数。如果你想要最多12位数字,并且末尾有任意数量的Z,你可以使用

/09[6-9][1-9][0-9]+/

在Perl或中

/09[6-9][1-9][0-9][0-9]*/

在POSIX中-那里不存在+表示法。

09[6-9][1-9][0-9]{8}

解释正则表达式

/^09[6-9][1-9][3-9]{6}.{2}$/

这应该是你想要的,假设最后两个数字可以是任何数字,因为你没有指定它们。

分解:

^匹配字符串的开头

09"09"完全匹配

[6-9]和类似的定义字符的范围

[3-9]{6}说我们希望在3到9次之间出现6次

.{2}的意思是任何事物中的2。

实际上,POSIX确实有范围,请参阅re_format(7)。

常见的是POSIX基本正则表达式:

09[6-9][1-9][0-9]'{6'}

如果12位数字正确,则调整6至8。你可以为更灵活的数字范围写这篇文章:

09[6-9][1-9][0-9]'{6,8'}

有时,你会有POSIX ERE:

09[6-9][1-9][0-9]{6}

POSIX ERE支持+像PCRE一样,BRE不支持,但你可以在那里使用'{6,'}作为开放端。POSIX正则表达式不像PCRE那样(请参阅Dominik的答案),需要分隔符作为正则表达式的一部分。

有关Perl正则表达式,请参见perlre(1)和perlretut(1),PCRE与它们基本兼容。

PHP现在使用PCRE,以备不时之需。