java - 正则表达式不遵守长度限制

标签 java regex

我在 Java 中使用以下正则表达式来匹配用户名:

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

我希望这个正则表达式与包含所有字母数字字符(以字母开头)的字符串匹配,中间最多允许一个句点(点),大小在 8 到 15 之间。

因此,它有两个问题:

  1. 它不接受长度为 8 的字符串。它接受最小长度为 9 的字符串。
  2. 长度没有上限。它匹配任何长度超过 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(any amount) = ∞

猜猜您要查找的正则表达式与这个类似:

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

See demo and more explanation at regex101

关于java - 正则表达式不遵守长度限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45655225/

相关文章:

java - 如何重新定位小程序查看器窗口?

MySQL REGEXP 不匹配 2 个逗号

正则表达式以匹配具有两个以上设置位的二进制数

python - 用每个子字符串的长度替换python中的子字符串

javascript - 从 url 中获取数字

java - 如何只填充圆角矩形的颜色并将其保存在 Java 中的 var 中

java - JSF 2.0 + PrimeFaces : dataTable page-numeration does not work

regex - 避免在正则表达式中转义字符

java - xml 数据文档末尾的额外内容

java - 从 IP 网络摄像头获取流