2010-08-10 109 views

回答

32
^([2-9]|1[0-6])$ 

将匹配2和9之间的单个数字或1和0和6之间的数字(包括0和6)。

+1

简单而重要。 +1。 – Joey 2010-08-10 16:55:51

+4

+1并删除我的答案,因为你击败了我8秒。 – 2010-08-10 16:57:03

+0

谢谢! **快速注释**,如果您不需要从字符串的开头到结尾进行匹配,或者您不需要捕获组:[(?:[2-9] | 1 [0-6] )' – skplunkerin 2016-12-22 16:16:12

6

带分隔符(出于习惯):/^([2-9]|1[0-6])$/

正则表达式本身只是:^([2-9]|1[0-6])$

+0

斜杠是PHP特有的,当某人谈论一般正则表达式时可能应该删除斜杠。 – 2010-08-10 16:56:30

+4

@Billy ONeal:这完全不是PHP特有的。它可以用于任何允许您选择分隔符的语言。 – eldarerathis 2010-08-10 16:57:44

+1

Perl在PHP之前拥有它们。无论如何,它们确实不是表达的一部分。如果你的语言要求你使用类似的东西,那么被问到的人可以轻易地添加它们。 – Joey 2010-08-10 16:57:56

1
^([2-9]|1[0-6])$ 

编辑:去掉引号澄清)

+0

引号是特定于如何将正则表达式插入到编程环境中,但在抽象中讨论正则表达式时应该将其删除。 – 2010-08-10 16:57:56

+0

谢谢;纠正。 – alecov 2010-08-10 17:08:44

+2

你的正则表达式“^ [2-9] | 1 [0-6] $”是错误的,因为“|”将“^”分隔为第一个模式,将“$”分隔为第二个模式。这里需要括号,例如:“^([2-9] | 1 [0-6])$” – vog 2010-08-10 17:16:21

-1

(^ [2 -9] $ |^1 [0-6] $)

通过为每组数字指定开始和停止,您正在寻找正则表达式不会返回36,46,...等等。我试过上面的解决方案,发现这对于保持在2-16的范围内效果最好。