将前瞻值保留在正则表达式中
Keeping the lookahead value in regular expression
假设我有字符串 abcdefghi
如果我应用正则表达式
m/([a-z])([a-z])/g
对它,我得到了不相交的对
ab
, cd
, ef
, gh
.
我想要的是所有重叠对 ab
, bc
, cd
, de
, ef
, fg
, gh
, hi
.
当我使用前瞻时,比如
m/([a-z])(?=[a-z])/g
我得到每对的第一个字母
a
、b
、c
、d
、e
、f
、g
、h
,但是不保留先行本身。
我如何告诉正则表达式引擎我想要第一个字母 以及先行 ,以获得成对的字母 ab
、bc
, cd
, de
, ef
, fg
, gh
, hi
?
前瞻周围的 ()
是非捕获的,并且因为前瞻是 0 宽度匹配,所以您不会在结果中得到 "looked at" 的字符。
你只需要用一个捕获组将前瞻捕获的内容包围起来:
([a-z])(?=([a-z]))
附带说明一下,还有其他方法可以获得重叠对,例如使用循环到(字符串的长度 - 2)的 for 循环。您可能还想考虑这些选项。
您可以依靠引擎 BUMP ALONG 功能来做到这一点。
通过使用包含单个捕获组的零宽度断言来包含
每对。
由于引擎没有消耗任何字符,它有一个内置的
避免无限循环的机制,即递增当前位置
1.
(?=([a-z]{2}))
https://regex101.com/r/GYcgiZ/1
或者,
自己匹配2消耗1即可。
(?=([a-z]{2})).
假设我有字符串 abcdefghi
如果我应用正则表达式
m/([a-z])([a-z])/g
对它,我得到了不相交的对
ab
, cd
, ef
, gh
.
我想要的是所有重叠对 ab
, bc
, cd
, de
, ef
, fg
, gh
, hi
.
当我使用前瞻时,比如
m/([a-z])(?=[a-z])/g
我得到每对的第一个字母
a
、b
、c
、d
、e
、f
、g
、h
,但是不保留先行本身。
我如何告诉正则表达式引擎我想要第一个字母 以及先行 ,以获得成对的字母 ab
、bc
, cd
, de
, ef
, fg
, gh
, hi
?
前瞻周围的 ()
是非捕获的,并且因为前瞻是 0 宽度匹配,所以您不会在结果中得到 "looked at" 的字符。
你只需要用一个捕获组将前瞻捕获的内容包围起来:
([a-z])(?=([a-z]))
附带说明一下,还有其他方法可以获得重叠对,例如使用循环到(字符串的长度 - 2)的 for 循环。您可能还想考虑这些选项。
您可以依靠引擎 BUMP ALONG 功能来做到这一点。
通过使用包含单个捕获组的零宽度断言来包含
每对。
由于引擎没有消耗任何字符,它有一个内置的
避免无限循环的机制,即递增当前位置
1.
(?=([a-z]{2}))
https://regex101.com/r/GYcgiZ/1
或者,
自己匹配2消耗1即可。
(?=([a-z]{2})).