Regex 正则表达式中\G锚点的用途

Regex 正则表达式中\G锚点的用途,regex,Regex,我简直不明白\G锚是干什么的 如果我在1122aa33上执行/\G\d\d/,它将匹配11和22。但是,当我在1122aa33上尝试/\d\d\G/时,它与任何内容都不匹配 有人能启发我吗? 它基本上从“前一个匹配”的结尾开始匹配,在正则表达式的第一次运行时,它被认为是字符串的开头 换句话说,如果在字符串1122aa33上运行两次/\G\d\d/,则第二次运行将在22上返回匹配项 它基本上从“前一个匹配”的结尾开始匹配,在正则表达式的第一次运行时,它被认为是字符串的开头 换句话说,如果在字符串1

我简直不明白
\G
锚是干什么的

如果我在
1122aa33
上执行
/\G\d\d/
,它将匹配
11
22
。但是,当我在
1122aa33
上尝试
/\d\d\G/
时,它与任何内容都不匹配

有人能启发我吗?

它基本上从“前一个匹配”的结尾开始匹配,在正则表达式的第一次运行时,它被认为是字符串的开头

换句话说,如果在字符串
1122aa33
上运行两次
/\G\d\d/
,则第二次运行将在
22
上返回匹配项

它基本上从“前一个匹配”的结尾开始匹配,在正则表达式的第一次运行时,它被认为是字符串的开头

换句话说,如果在字符串
1122aa33
上运行两次
/\G\d\d/
,则第二次运行将在
22
\G
上返回匹配项

在第一次传递时,
\G
相当于
\A
,这是字符串锚点的起点。由于
\d\d\A
永远不会匹配任何内容(因为在字符串开头之前怎么可能有两个数字?),因此
\d\G
也永远不会匹配任何内容

\G
是一个

在第一次传递时,
\G
相当于
\A
,这是字符串锚点的起点。由于
\d\d\A
永远不会匹配任何内容(因为在字符串开头之前怎么可能有两个数字?),因此
\d\G
也永远不会匹配任何内容

根据:

锚点\G在上次匹配结束的位置匹配在第一次匹配尝试期间,\G将以\A的方式在字符串开头进行匹配。

现在,为了真正回答您的问题:在第二个示例中,没有结果的\G不能匹配字符串的开头,因为您首先要查找两位数字,如果没有初始匹配,\G也不会匹配任何其他数字。

根据:

锚点\G在上次匹配结束的位置匹配在第一次匹配尝试期间,\G将以\A的方式在字符串开头进行匹配。


现在,为了真正回答您的问题:在第二个示例中,没有结果的\G不能匹配字符串的开头,因为您首先要查找两个数字,如果没有初始匹配,则\G也不会匹配任何其他数字。

这意味着\G只用于检查之前的匹配?。。所以\d\d\G是完全无效的语法,对吗?它本身并不是无效的,但它毫无意义。基本上,正则表达式引擎会在找到匹配项后继续计算字符串,以查看是否可以扩展该匹配项(即,使用字符串“abc”的
/.*/
将首先匹配
a
,然后将匹配项扩展到
ab
,然后扩展到
abc
),或者是否可以找到任何其他匹配项。在后一种情况下,
\G
指定后续匹配必须在前一个匹配之后开始。是的,你的措辞(更好)了:它确实不是无效的。@DanielVandersluis我很抱歉再次解开这个话题,但我并不完全清楚没有意义的部分\G匹配字符串的开头或最后一个匹配的结尾(Java),因此,当我在“dog dog”上使用\Gdog时,我只得到第一只狗。当我放置dog\G时,它一开始不匹配,因为行开始之前没有字符,对吗?因此,从那时起就不会有更多的匹配,因为没有第一个匹配(非连续匹配)。此外,由于引擎在一次匹配后向前移动,dog\G没有意义,因为没有向后匹配(我假设)。这意味着\G仅用于检查之前的匹配?。。所以\d\d\G是完全无效的语法,对吗?它本身并不是无效的,但它毫无意义。基本上,正则表达式引擎会在找到匹配项后继续计算字符串,以查看是否可以扩展该匹配项(即,使用字符串“abc”的
/.*/
将首先匹配
a
,然后将匹配项扩展到
ab
,然后扩展到
abc
),或者是否可以找到任何其他匹配项。在后一种情况下,
\G
指定后续匹配必须在前一个匹配之后开始。是的,你的措辞(更好)了:它确实不是无效的。@DanielVandersluis我很抱歉再次解开这个话题,但我并不完全清楚没有意义的部分\G匹配字符串的开头或最后一个匹配的结尾(Java),因此,当我在“dog dog”上使用\Gdog时,我只得到第一只狗。当我放置dog\G时,它一开始不匹配,因为行开始之前没有字符,对吗?因此,从那时起就不会有更多的匹配,因为没有第一个匹配(非连续匹配)。此外,由于引擎在一次匹配后向前移动,dog\G没有意义,因为没有后面的匹配(我假设)。