正则表达式量词语句失败

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

  • az 0-多次,

  • 0-9 0-3次,

  • & 0-多次,

  • ” “0-1次,

  • 至少 8 个字符。

我还使用这个网站来测试我的代码 - 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.

问题是我的正则表达式将接受任意数量的数字,无论我对其施加限制,并且它会接受单词中间的空格,但不可预测,我不知道为什么。

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


慕田峪9158850
浏览 62回答 2
2回答

手掌心

当前模式的开头([a-zA-Z&]*[0-9]{0,3}[\s]?)\w{8,}有 0+ 次、0-3 次或可选的量词。最后它应该匹配至少 8 次以上的单词字符,而这不会匹配任何示例。您可以使用负前瞻(?!来断言没有出现 4 个数字或 2 个空格,然后重复匹配字符类中列出的 8 次以上。^(?!(?:[^\r\n0-9]*[0-9]){4})(?!(?:\S* ){2})[a-zA-Z0-9 &]{8,}$^字符串的开头(?!负向前看,断言右边的不是(?:[^\r\n0-9]*[0-9]){4}匹配 4 次一个数字)关闭前瞻(?!负向前看,断言右边的不是\S* 匹配 0+ 次非空白字符,然后匹配一个空格(?:非捕获组){2}关闭非捕获组并重复2次)负向前瞻,断言不是 2 个空格[a-zA-Z0-9 &]{8,}匹配任何列出的 8 次以上$字符串结尾正则表达式演示

慕沐林林

与正向前瞻有些不同Pattern.compile("(?=^[^ ]* ?[^ ]*$)(?=^([^0-9]*[0-9]?){1,3}$)^[A-Za-z0-9\\& ]{8,}$")[a-zA-Z0-9\\& ]{8,}:允许的字符数为 8 个或更多。(?=^[^ ]* ?[^ ]*$):正向前瞻:允许单个空格(?=^([^0-9]*[0-9]?){1,3}[^0-9]*$):正向前瞻最多允许三个数字实例https://regex101.com/r/FvaslE/2
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java