为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式量词语句失败

正则表达式量词语句失败

慕田峪9158850 2023-09-20 14:31:51
我需要我的正则表达式语句来执行以下操作:需要: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.问题是我的正则表达式将接受任意数量的数字,无论我对其施加限制,并且它会接受单词中间的空格,但不可预测,我不知道为什么。我是正则表达式的新手,所以请对我温柔一些
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

当前模式的开头([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 次以上

  • $字符串结尾

正则表达式演示


查看完整回答
反对 回复 2023-09-20
?
慕沐林林

TA贡献2016条经验 获得超9个赞

与正向前瞻有些不同

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


查看完整回答
反对 回复 2023-09-20
  • 2 回答
  • 0 关注
  • 59 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信