正则表达式:匹配从01到56的一系列六个数字

时间:2014-04-20 17:42:57

标签: php regex

我坚持制作一个与01到56之间的数字匹配的正则表达式,它们之间有空格,但结尾不是空格。字符串示例看起来像这些:

"33 44 51 52 53 54"
"01 05 09 14 25 36"

为实现这一目标,我使用以下表达式(并在http://regexpal.com/进行测试):

([0-5][0-9] +){6}

它运行正常,但问题是只有在末尾有空格时才匹配这些字符串:

"01 05 09 14 25 36 "

我该如何解决这个问题?

如何限制它匹配到56而不是59?并从01开始,而不是从00开始?

3 个答案:

答案 0 :(得分:4)

试试这个:

^((0[1-9]|[1-4][0-9]|5[0-6]) ){5}(0[1-9]|[1-4][0-9]|5[0-6])$

这将匹配01到56之间的任何数字,其中每个数字后跟一个空格,重复5次,然后是01到56之间的另一个数字。开始(^)和结束({{ 1}}}锚点确保在匹配的字符串之前或之后不允许其他字符。

但是,根据您选择的语言/平台,对于类似的内容,最好简单地用空格分割字符串并将每个子字符串解析为整数,并验证该数字是否在适当的范围内。

答案 1 :(得分:1)

比你想象的容易。但这仍然匹配从00到59的所有内容。所以我没有回答第二个问题。

([0-5][0-9] +){5}[0-5][0-9]

答案 2 :(得分:0)

以5和0开头的数字分开匹配:

^((0[1-9]|[1-4][0-9]|5[0-6])( +|$)){6}(?<! )$

(?<! )看看最后一个空格背后的负面看法

<强> 说明

^       # Start of string
    (   # 1st optional capturing group
        (   #2nd optional capturing group
            0[1-9]      # Match two-digit numbers start with 0 and not 00
            |           # Or
            [0-4][0-9]  # Match two-digit numbers start with 0 through 4
            |           # Or
            5[0-6]      # Match 50 through 56
        )               # 0 or more spaces
            ( +|$)       # 1 or more spaces after digits but not the last
    ){6}    # For 6 times
    (?<! )  # No space at the end
$       # End of string

Live demo

请注意,第一行末尾有一个空格