在之前的问题中,我询问了如何匹配特定模式后面的字符。为了更具体,我想考虑这个例子:
我们想匹配所有跟随 b 或 d 的
结果将是这样的:
我们想匹配所有跟随 b 或 d 的
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)
\G
和\K
。 - nowox