【发布时间】:2010-08-06 21:10:47
【问题描述】:
我只是不明白 \G 锚点的作用。
如果我在1122aa33 上执行/\G\d\d/,它将匹配11 和22。但是,当我在 1122aa33 上尝试 /\d\d\G/ 时,它什么都不匹配。
谁能启发我?
【问题讨论】:
标签: regex
我只是不明白 \G 锚点的作用。
如果我在1122aa33 上执行/\G\d\d/,它将匹配11 和22。但是,当我在 1122aa33 上尝试 /\d\d\G/ 时,它什么都不匹配。
谁能启发我?
【问题讨论】:
标签: regex
\G 是一个anchor which matches the previous match position。
在第一遍时,\G 等价于\A,它是字符串锚点的开始。因为\d\d\A 永远不会匹配任何东西(因为你怎么能在字符串开头之前有两个数字?),\d\d\G 也永远不会匹配任何东西。
【讨论】:
/.*/ 将首先匹配a,然后将匹配项扩展为@ 987654329@,然后到abc) 或者如果可以找到任何其他匹配项。在后一种情况下,\G 指定后续匹配必须在前一个匹配之后开始。
根据this:
锚 \G 匹配上一次匹配结束的位置。 在第一次匹配尝试期间,\G 以 \A 的方式匹配字符串的开头。
现在,要实际回答您的问题:在第二个示例中,没有结果的示例 \G 无法匹配字符串的开头,因为您首先要寻找两位数,并且没有初始匹配, \G 也不会匹配任何其他内容。
【讨论】:
它基本上从“上一个匹配”的末尾开始匹配,在第一次运行正则表达式时,它被认为是字符串的开头。
换句话说,如果您在字符串1122aa33 上运行两次/\G\d\d/,第二次运行将返回22 上的匹配项。
【讨论】: