正则表达式 - 不了解查找数字是否有多个数字的前瞻
Regex - Don't understand lookaheads for finding if a number has multiple digits
我一直在努力学习正则表达式中的前瞻。
我正在尝试匹配以小写字母开头且有 4 个或更多数字的表达式。
/(?=\A[a-z])(?=\D\d{4,})/
如果数字彼此相邻,则此方法有效,但如果它们彼此远离,则无效。例如
z1562
- 通过(所有 4 个数字都相邻)
z15a62
- 失败 - 有 4 个数字
我哪里错了?我该如何解决这个问题?
您可以使用
\A(?=[a-z])(?=(?:\D*\d){4,})
^^^^^^^^^
您需要使用 *
匹配数字前的任意数量的非数字,至少 4 次(因此,您需要将 \D*\d
分组并将限制量词应用于组)。
还值得一提的是,\A
锚点应该移到前瞻之外,这样它只在字符串的开头触发一次。它还将使第二次前瞻仅在第一个之后触发一次。
我一直在努力学习正则表达式中的前瞻。
我正在尝试匹配以小写字母开头且有 4 个或更多数字的表达式。
/(?=\A[a-z])(?=\D\d{4,})/
如果数字彼此相邻,则此方法有效,但如果它们彼此远离,则无效。例如
z1562
- 通过(所有 4 个数字都相邻)
z15a62
- 失败 - 有 4 个数字
我哪里错了?我该如何解决这个问题?
您可以使用
\A(?=[a-z])(?=(?:\D*\d){4,})
^^^^^^^^^
您需要使用 *
匹配数字前的任意数量的非数字,至少 4 次(因此,您需要将 \D*\d
分组并将限制量词应用于组)。
还值得一提的是,\A
锚点应该移到前瞻之外,这样它只在字符串的开头触发一次。它还将使第二次前瞻仅在第一个之后触发一次。