RegEx表示两个字符后跟四个数字

时间:2016-03-30 07:29:51

标签: regex

你能用正则表达式来帮助我吗? 4位和2个字符

我写了这个

^([0-9]{4})(s*([a-zA-Z]{2}))?$

但是当我验证它时也只接受4位数。

1 个答案:

答案 0 :(得分:0)

您的?表示上一项是可选的。

这意味着它可以匹配" 3421"以及" 2323som"。

正则表达式是贪婪的,所以他们会尝试匹配" 2378som"而不只是" 2378"如果你打电话给" 2378som"。您未获得匹配的原因可能是s*。这意味着零或更多" s"。如果您指的是空格,那么您应该使用(\s)*

因此它应该成为

^([0-9]{4})((\s)*([a-zA-Z]{2}))?$

检查unit tests here以了解这匹配的内容。

请注意,它只匹配正则表达式环境中\s所代表的内容(可能不包含制表符或其他类型的空格)。

你所写的,是试图与角色匹配" s"零次或多次,因此这刺痛:" 1234sab"是有效的,因为" 1234ab"。如果你打算匹配" 1234 ab",那么只有" 1234"被退回,是" s"缺少,所以它正在寻找2个字符。你提供了3个字符" AB" (空格+ a + b),超出范围[a-zA-Z]。因此,由于第二项不匹配(你想要3个字符2而空格不是AZ),你的?会忽略第二项,并返回第一项,ergo" 1234"。