gpt4 book ai didi

regex - 理解正则表达式中的\G 和\K

转载 作者:行者123 更新时间:2023-12-04 13:48:54 25 4
gpt4 key购买 nike

在之前的question ,我要求匹配遵循特定模式的字符。为了更具体,我想考虑这个例子:

我们要匹配bd 之后的所有x。我们可能想用 o 替换这些字符:

-a  x   x    xx x  x
-b x x x x xx x
-c x x x x x x
-d x x x xx x x

结果是这样的:

-a  x   x    xx x  x
-b o o o o oo o
-c x x x x x x
-d o o o oo o o

anubhava用一个与这个具有相同形式的非常好的正则表达式回答了我的问题:

/([db]|\G)[^x-]*\Kx/g

不幸的是,我没有完全理解\G\K 是如何工作的。我想对这个具体案例进行更详细的解释。

我尝试使用 Perl 正则表达式调试器,但它有点神秘。

Compiling REx "([db]|\G)[^x-]*\Kx"
Final program:
1: OPEN1 (3)
3: BRANCH (15)
4: ANYOF[bd][] (17)
15: BRANCH (FAIL)
16: GPOS (17)
17: CLOSE1 (19)
19: STAR (31)
20: ANYOF[\x00-,.-wy-\xff][{unicode_all}] (0)
31: KEEPS (32)
32: EXACT <x> (34)
34: END (0)

最佳答案

正确的正则表达式是:

(-[db]|(?!^)\G)[^x-]*\Kx

Check this demo

根据 regex101 描述:

\G - 断言位置在前一个匹配的末尾或第一个匹配的字符串的开头。 \G 也将匹配行首以及第一个匹配项,因此这里需要负先行 (?!^)

\K - 重置报告匹配的起点。任何先前消耗的字符都不再包含在最终匹配中。 \K 将丢弃所有匹配的输入,因此我们可以避免替换中的反向引用。

关于regex - 理解正则表达式中的\G 和\K,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28842979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com