我对正则表达式相当新,我越来越多地使用它们,我越喜欢它们。我正在研究一个必须满足以下条件的正则表达式:
我目前有以下正则表达式:^[a-zA-Z](?=.*[a-zA-Z]).{1}.*$
我遇到的问题是我的正向前瞻(?=.*[a-zA-Z]).{1}
并不局限于字母字符后面的后三个字符。
我觉得好像我在这里错过了一个概念。我在这个表达中缺少什么?
谢谢大家。
答案 0 :(得分:3)
你前瞻中的.*
正在这样做。你应该在这里限制范围,如
^[a-zA-Z](?=.{0,2}[a-zA-Z]).{1}.*$
编辑:如果你想确保字符串中至少有4个字符,你可以使用另一个这样的前瞻:
^[a-zA-Z](?=.{3})(?=.{0,2}[a-zA-Z]).{1}.*$
答案 1 :(得分:3)
你想要前瞻什么?为什么不使用
^[a-zA-Z](..[a-zA-Z]|.[a-zA-Z].|[a-zA-Z]..)
并且开心吗?
答案 2 :(得分:1)
您可能需要做一个解决方法。类似的东西:
^[a-z](?=([a-z]..|.[a-z].|..[a-z])).{3}.*
([a-z]..|.[a-z].|..[a-z])
答案 3 :(得分:0)
将前瞻中的*
更改为?
以获取m/^[a-zA-Z](?=.?[a-zA-Z]).{1}.*$
如果我理解你的标准,那就会因为贪婪的变化而修复它。
这些正确匹配:
a2a3-match
2aaa-no match
Aaaa-match
a333-no match