A A @ B应该使用哪种模式,A可以包含1-16位数,B包含1-18位数字?
我使用过模式:
String regex = "\\d+@\\d+";
但上述模式对'A'
接受超过16位数,'B'
接受超过18位数。
我应该使用什么样的模式。
注意:总长度不得超过32个字符。
答案 0 :(得分:4)
您需要quantifiers {n,m}
的长版本,其中n是最小金额,m是最大重复次数。
困难的是你的总长度为32个字符。确保您需要lookahead assertion。
^(?=.{1,32}$)\d{1,16}@\d{1,18}$
^
和$
是字符串开头和结尾的锚点,以避免parital匹配(如果需要,取决于Java中的方法)
(?=.{1,32}$)
是一个先行断言,可确保字符串总共有1到32个字符。
或作为Java字符串
String regex = "^(?=.{1,32}$)\\d{1,16}@\\d{1,18}$";
答案 1 :(得分:0)
\\d{1,16}@\\d{1,18}
应该为你做。
根据你的正则表达式,它将从1到无限次匹配,即+
。
我也想讲述*
,它从零到无限次匹配。
<强>更新强>
获得32位数比其他任何数字都重要。 所以我们最好使用:
[\d@]{32}
答案 2 :(得分:0)
尝试使用允许您指定范围的重复字符:
\\d{1,16}@\\d{1,18}
答案 3 :(得分:0)
\\d{1,16}@\\d{1,15}|\\d{1,13}@\\d{1,18}
总长度不会超过32。 (您可以登录正则表达式测试人员http://myregexp.com/?regex=%5Cd%7B1,16%7D@%5Cd%7B1,15%7D%7C%5Cd%7B1,13%7D@%5Cd%7B1,18%7D&text=12345@1234567)