Java 正则表达式不';我不尊重长度限制

Java 正则表达式不';我不尊重长度限制,java,regex,Java,Regex,我有以下Java正则表达式用于与用户名匹配: ^(?!.*\\..*\\..*)[A-Za-z]([A-Za-z0-9.]*[A-Za-z0-9]){8,15}$ 我希望这个正则表达式与包含所有字母数字字符(从字母表开始)的字符串匹配,中间最多只有一个句点(点),大小在8到15之间。 因此,它有两个问题: 它不接受长度为8的字符串。它接受最小长度为9的字符串 长度没有上限。它与任何长度超过8个字符的字符串匹配 为什么它没有考虑到{8,15}?问题1:您正在量化至少需要一个[A-Za-z0-9]

我有以下Java正则表达式用于与用户名匹配:

^(?!.*\\..*\\..*)[A-Za-z]([A-Za-z0-9.]*[A-Za-z0-9]){8,15}$
<>我希望这个正则表达式与包含所有字母数字字符(从字母表开始)的字符串匹配,中间最多只有一个句点(点),大小在8到15之间。 因此,它有两个问题:

  • 它不接受长度为8的字符串。它接受最小长度为9的字符串
  • 长度没有上限。它与任何长度超过8个字符的字符串匹配

  • 为什么它没有考虑到
    {8,15}

    问题1:您正在量化至少需要一个
    [A-Za-z0-9]
    的组,该组之前的
    [A-Za-z0-9.]
    。因此已经需要至少8个字符。另外,您的正则表达式在此构造之前需要一个
    [A-Za-z]
    ,至少需要9个字符

    问题2:您正在量化一个包含
    [a-Za-z0-9.]*
    任何金额的组,而这个
    {8,15}
    ,因此上限为15x(任何金额)=∞

    我猜你要找的正则表达式和这个很相似:

    ^(?![^.]*\\.[^.]*\\.)[A-Za-z](?:\\.?[A-Za-z0-9]){7,14}$
    

    请给出一些要接受的示例。您应该将其添加为答案@BobbleBobble