从重复组中生成反向引用

3
(?:\/(\w+?=\/)\/(\w+))*

有没有办法从组内检索回溯引用?在我的上面的表达式中,(?:) 是否阻止整个组捕获回溯引用?

尝试匹配例如:/hello/how/are/you.../today,并捕获'/'之间的所有值。


\w 不必被 [ ] 包围。我相信在 ?= 之前应该有一个开括号(需要做出适当的更改)。 - Bernhard Barker
我添加了 \w 以使其更易于阅读。编辑使其更加易读,谢谢。 - Magic Lasso
最快的解决方案是将'/'加倍。 - BlackBear
@BlackBear,抱歉我的问题有点愚蠢,你的意思是什么? - Magic Lasso
我也在考虑\G/(\w+),但我甚至不确定\G得到了多大程度的支持。 - Magic Lasso
如果您将“//”加倍,使其变为“//hello///how//are//you//”,则正则表达式将按原样工作。 - BlackBear
1个回答

2
有没有办法在组内检索反向引用?
是的。组不是按层次结构解释的。例如,(a(b))只有两个组,一个和二,可以(回)引用。在引用方面,它等同于(a)(b)。引用的顺序仅由正则表达式模式中组的顺序(由组的起始确定)确定。一个组是另一个组的一部分并不改变这个事实。
在我的表达式中,no-reference (?:) 是否防止整个组捕获反向引用?
不是的。它只是防止标记为非捕获组的组从捕获(回)引用。嵌套组不受影响,并且除非它们也被标记为非捕获组,否则将被捕获。

好的,我花了几个月才标记出来,但感谢你的答案。正则表达式示例往往比较弱,所以每当我遇到复杂的情况时,要么测试很多次,要么去Stackoverflow上找答案。 - Magic Lasso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接