在正则表达式中匹配900到950之间的数字

时间:2015-11-19 19:05:31

标签: php regex

如何匹配 900 950 之间的数字?

我有以下正则表达式匹配数字900-950:

/9[0-5][0-9]{3}/

但它也匹配 955 字符串,

我如何修复它以匹配直到900到950只?

3 个答案:

答案 0 :(得分:7)

要匹配900 - 950号码范围,请使用

^9(?:[0-4][0-9]|50)$

或者,如果它在更大的文本中

(?<!\d)9(?:[0-4][0-9]|50)(?!\d)

请参阅此regex demo

^是字符串锚点的开头,$是字符串锚点的结尾。

(?<!\d)是负面的后视,确保前面的符号不是数字。 (?!\d)是一个负向前瞻,确保下一个字符不是数字。

使用非捕获组(?:...),我们避免捕获我们不需要的东西。

还有一个选项:如果数字介于非单词字符之间,则可以利用单词边界:

\b9(?:[0-4][0-9]|50)\b

请注意,我使用的是9(?:[0-4][0-9]|50),而不是(?:9[0-4][0-9]|950)。虽然第二个更具可读性,但从性能的角度来看效率较低,因为9(?:[0-4][0-9]|50)涉及较少的回溯(即如果没有匹配则更快失败)。

答案 1 :(得分:4)

将其拆分为OR:

/(9[0-4][0-9]|950)/

9[0-4][0-9]将匹配900到949

950涵盖您的950案例而无需重复

如果你想确保不匹配其他东西(比如你可能不想匹配1950,可能只想自己匹配950):

/(?<![0-9])(9[0-4][0-9]|950)(?![0-9])/

(?<![0-9])表示之前不允许输入数字,(?![0-9])表示不允许输入数字(负面看后面和后面)

答案 2 :(得分:3)

我认为最简单的就是:

.inside-event.btn {
width: auto;
min-width: 100%;
display: inline-block;
}