Regex-Don';我不理解查找一个数字是否有多个数字
我一直在努力学习Regex中的lookaheads 我正在尝试匹配一个以小写字母开头并有4个或更多数字的表达式Regex-Don';我不理解查找一个数字是否有多个数字,regex,lookahead,Regex,Lookahead,我一直在努力学习Regex中的lookaheads 我正在尝试匹配一个以小写字母开头并有4个或更多数字的表达式 /(?=\A[a-z])(?=\D\d{4,})/ 如果两个数字彼此相邻,则此功能有效,但如果它们彼此远离,则不起作用。比如说 z1562-通过(所有4位数字相邻) z15a62-故障-有4位数字 我哪里出了问题?如何修复此问题?您可以使用 \A(?=[a-z])(?=(?:\D*\d){4,}) ^^^^^^^^^ 您需要使用*至少4次匹配一个数字之前
/(?=\A[a-z])(?=\D\d{4,})/
如果两个数字彼此相邻,则此功能有效,但如果它们彼此远离,则不起作用。比如说
z1562
-通过(所有4位数字相邻)
z15a62
-故障-有4位数字
我哪里出了问题?如何修复此问题?您可以使用
\A(?=[a-z])(?=(?:\D*\d){4,})
^^^^^^^^^
您需要使用*
至少4次匹配一个数字之前的任意数量的非数字(因此,您需要对\D*\D
进行分组,并将限制量词应用于该组)
见
还值得一提的是,\A
锚点应移到前视之外,以便仅在字符串开头触发一次。它还将使第二个前瞻只触发一次,就在第一个前瞻之后。您可以使用
\A(?=[a-z])(?=(?:\D*\d){4,})
^^^^^^^^^
您需要使用*
至少4次匹配一个数字之前的任意数量的非数字(因此,您需要对\D*\D
进行分组,并将限制量词应用于该组)
见
还值得一提的是,
\A
锚点应移到前视之外,以便仅在字符串开头触发一次。它还将使第二个前瞻只触发一次,就在第一个之后。FYI:您甚至可以使用{4}
而不是{4,}
,因为4足以使前瞻返回true。我只看到了?=
用于正向前瞻和代码>用于负前瞻。?:
指的是什么?(?:…)
是一个,它只用于分组,不用于捕获子匹配。Just的效率更高,不会弄乱输出结构。仅供参考:您甚至可以使用{4}
而不是{4,}
,因为4足以让前瞻返回true。我只看到了?=
表示正向前瞻和代码>用于负前瞻。?:
指的是什么?(?:…)
是一个,它只用于分组,不用于捕获子匹配。只是效率更高一点,而且不会弄乱输出结构。前瞻性接受您在不使用lookahead的情况下编写的相同类型的模式。如果您在前瞻中的模式本身没有意义,那么它在前瞻中也没有意义。你需要弄清楚为什么你在lookahead中的模式不匹配15a62
。lookahead接受你在没有lookahead的情况下编写的相同类型的模式。如果您在前瞻中的模式本身没有意义,那么它在前瞻中也没有意义。您需要找出前瞻中的模式不匹配的原因15a62
。