我需要我的正则表达式语句来执行以下操作:需要: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 次以上$
字符串结尾
慕沐林林
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
添加回答
举报
0/150
提交
取消