你能用正则表达式来帮助我吗? 4位和2个字符
我写了这个
^([0-9]{4})(s*([a-zA-Z]{2}))?$
但是当我验证它时也只接受4位数。
答案 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"。