2在第二个捕获具有多个捕获的组,由不需要的char分隔

时间:2016-12-06 08:44:46

标签: regex ksh

我试图捕捉到跟随另一个或他自己的捕获组的倍数。我可以反复使用相同字符串的倍数。让我们进行以下测试:

(\w*_abcd)

我想抓住 abcd_X foreach randomX_abcd (并知道它们之间的界限)。我不能抓住“random2_abcd”,因为它不存在!

以下是我到目前为止:(abcd_\w*)是捕获 randomX_abcd 。我得到(\w*_abcd)\s*(?: (abcd_\w*);?)+来捕获 abcd_X 部分。起初我试图抓住evey abcd_X分开。所以我使用(\w*_abcd)\s*((?: ?abcd_\w*;?)+) 但它只捕获最后的 abcd_X ,因为它很贪婪。这不是第二组的倍数捕获。 Example

现在我正试图获得2组(不再有多个匹配相同的捕获组:一个使用 randomX_abcd ,另一个使用相应的 abcd_X列表。是一个棘手的部分:它可能有多个空格和新行。但它可能只有一个空格。所以我不能依赖换行部分。 鉴于我的新想法,我想到了这个:

{{1}}

哪个工作正常,但我很想知道。是否有可能实现我的第一个想法:用每个不同的 abcd_X 捕获相同的 randomX_abcd

1 个答案:

答案 0 :(得分:1)

不,这是不可能的,因为正则表达式索引在成功匹配后向右前进。您不能在字符串中的同一索引处多次匹配。