正则表达式量词语句失败

Regex Quantifier Statement Fails

我需要我的正则表达式语句来执行以下操作: 需要:

我也使用这个网站来测试我的代码 - https://regexr.com.

我的正则表达式:

([a-zA-Z&]*[0-9]{0,3}[\s]?)\w{8,}

这些应该有效:

abcD &EFG,
ABCde f123,
&&12ADSD&&.

这些不应该:

a bcD &EFG,
AB5Cde f123,
&&12ADSD&&34,
1234567,
nope.

问题是我的正则表达式会接受任意数量的数字,不管我对它设置限制,它会接受单词中间的空格,但出乎意料,我不知道为什么。

我是正则表达式的新手,所以对我温柔点

您当前模式的开头 ([a-zA-Z&]*[0-9]{0,3}[\s]?)\w{8,} 有 0+ 次、0-3 次或可选的量词。

最后它应该匹配至少 8 次以上不匹配任何示例的单词字符。

您可以使用否定前瞻 (?! 断言没有出现 4 位数字或出现 2 次 space 然后重复匹配字符 [=63] 中列出的 8 次以上=].

^(?!(?:[^\r\n0-9]*[0-9]){4})(?!(?:\S* ){2})[a-zA-Z0-9 &]{8,}$
  • ^ 字符串开头
  • (?! 否定前瞻,断言右边的不是
    • (?:[^\r\n0-9]*[0-9]){4} 匹配一个数字 4 次
  • ) 关闭前瞻
  • (?! 否定前瞻,断言右边的不是
    • (?:非捕获组
      • \S* 匹配 0+ 次非白色 space 字符,然后匹配 space
    • ){2}关闭非捕获组重复2次
  • ) 否定前瞻,断言不是 2 spaces
  • [a-zA-Z0-9 &]{8,} 匹配任何列出的 8 次以上
  • $ 字符串结束

Regex demo

与正面前瞻有些不同

Pattern.compile("(?=^[^ ]* ?[^ ]*$)(?=^([^0-9]*[0-9]?){1,3}$)^[A-Za-z0-9\& ]{8,}$")

[a-zA-Z0-9\& ]{8,} : 允许字符的 8 个或更多字符。

(?=^[^ ]* ?[^ ]*$) :正面前瞻:允许单个 space

(?=^([^0-9]*[0-9]?){1,3}[^0-9]*$) :正向前看最多允许三个数字实例

https://regex101.com/r/FvaslE/2