我坚持制作一个与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开始?
答案 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
请注意,第一行末尾有一个空格