2个捕获倍数捕获的小组在第二个被不必要的字符隔开的地方捕获



我试图捕获多个捕获的捕获组,跟随另一个或他自己。我可以一遍又一遍地拥有相同的字符串的倍数。让我们参加以下测试:

 thing: random1_abcd
                abcd_n1p3; abcd_n2p1

"random2_abcd" does not exist.
 thing:  random3_abcd
                abcd_n1p1; abcd_n2p3
 thing: random4_abcd
                abcd_n1p3; abcd_n3p1; abcd_n2p7
 thing:  random5_abcd
                abcd_n4p2; abcd_n3p3; abcd_n6p7; abcd_n1p6

我想捕获 abcd_x foreach randox_abcd (并且知道它们之间的界限)。我不能捕获" Random2_ABCD" ,因为它不存在!

这是我到目前为止的内容:(w*_abcd)是捕获 Randomx_ABCD 。我得到了(abcd_w*)来捕获 ABCD_X 部分。起初,我试图捕获Evey ABCD_X分开。因此,我使用了(w*_abcd)s*(?: (abcd_w*);?)+,但它仅捕获最后一个 ABCD_X ,因为它很贪婪。第二组不会抓住倍数。示例

现在,我正在尝试仅获得2个组(不再有倍数与相同的捕获组匹配:一个 rangax_abcd ,另一个与相应的 abcd_x list 。是一个棘手的部分:它可能具有倍数和新线路。但是它可能只有一个空间。因此,我不能依靠Newline部分。考虑到我提出的新想法:

(w*_abcd)s*((?: ?abcd_w*;?)+)

这很好,但我想知道。是否可以实现我的第一个想法:捕获相同的 Randomx_ABCD ,每个独特的 abcd_x

no,这是不可能的,因为成功匹配后,正则索引是向右提出的。您不能在字符串中的相同索引上几次匹配。

最新更新