A @ B的模式

时间:2014-04-30 06:16:08

标签: java regex

A A @ B应该使用哪种模式,A可以包含1-16位数,B包含1-18位数字?

我使用过模式:

String regex = "\\d+@\\d+"; 

但上述模式对'A'接受超过16位数,'B'接受超过18位数。 我应该使用什么样的模式。

注意:总长度不得超过32个字符。

4 个答案:

答案 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