Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex-Don';我不理解查找一个数字是否有多个数字_Regex_Lookahead - Fatal编程技术网

Regex-Don';我不理解查找一个数字是否有多个数字

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次匹配一个数字之前

我一直在努力学习Regex中的lookaheads

我正在尝试匹配一个以小写字母开头并有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