我在试着匹配一个银行帐号。它可以是这样的格式:##########或######-##########
######-),如果存在的话,可以有1-6个数字跟在-后面,它们不能都是零。它可以与123456-相匹配,但不能000000-##########)可以有2-10个数字,必须有一个无零字符。我从这个regex (\d{1,6}\-)?\d{2,10}开始。它应该匹配1和2行,而不是3和4。这个正则表达式匹配1.2和4。
发布于 2016-02-14 20:48:44
您可以使用带有负前瞻性的正则表达式,以确保开始时带有所有零的代码不匹配:
^(?:(?!0+-)\d{1,6}-)?(?=\d*[1-9])\d{2,10}$这里,
^ -匹配字符串的开头(?:(?!0+-)\d{1,6}-)? -可选地(1次或0次,由于(?:...)?构造)匹配1到6位数字(与\d{1,6}),后面跟着连字符,只有当到-的数字不是零时(由于负的前瞻性(?!0+-))(?=\d*[1-9]) -第二组2到10位数应该至少有一个非零位数。\d{2,10} -匹配2到10位数字,后面跟着.$ -字符串的末尾基本上,您只需要在regex中添加两样东西:
^和$)发布于 2016-02-14 21:09:00
Wiktof Stribizew的回答是“好的”。
但是,如果你想避免头朝前看的头痛,你只需使用以下几个:
^(?:[1-9](?:\d{1,5})?-)?\d{2,10}$在这里,我们只是禁止在第一组中的初始"0“,然后只允许直到其他5个数字。
https://stackoverflow.com/questions/35397751
复制相似问题