我试图捕捉到跟随另一个或他自己的捕获组的倍数。我可以反复使用相同字符串的倍数。让我们进行以下测试:
(\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 ?
答案 0 :(得分:1)
不,这是不可能的,因为正则表达式索引在成功匹配后向右前进。您不能在字符串中的同一索引处多次匹配。