这是大政方针:
(0-1)\x{e76f}20-3
目标:匹配号码:0到23
(工作版本:
(0-1?)\x{e76f}20-3
)
第一个版本的问题(0-9\x{e76f}(0-1)\20-3):
对我来说,这意味着:匹配这些数字(或包含它们的字符串/数字)
但它也与24相匹配。为什么?
我还尝试(与精确的模式相匹配,而不是潜在的超集):
在 http://regexr.com/中尝试
发布于 2016-06-29 13:18:49
因为你不用锚。试一试
^([0-9]|([0-1][0-9])|2[0-3])$不过,可以略为简化:
^(1?\d|2[0-3])$它测试整个字符串-- ^匹配开头,$匹配结束。然后,它在一个组中有两个选择(被()包围)-首先是一个可选的 1,后面是任何数字(句柄0-19)。其他选项匹配一个2,后面是0-3 (句柄20-23)。
它稍微简单一些,,但是它不允许前导零,所以如果你需要的话,它必须是
^([01]?\d|2[0-3])$`发布于 2016-06-29 14:38:21
您似乎误解了RegExr显示为匹配的内容。
考虑到示例文本24
g,这将产生两个匹配(此标志告诉regex引擎继续匹配并返回文本中的所有其他匹配数字)2是匹配的,即使它后面跟着一个4。因此,如果您希望程序拒绝表示超出范围0、23的数字的字符串,则必须扩展模式,使其不再接受在指定数字之后的数字。
例如,您可以使用分别与字符串的开始和结束匹配的锚点^和$:
^([0-9]|([0-1][0-9])|2[0-3])$https://stackoverflow.com/questions/38100675
复制相似问题