首先,让我解释一下,这个问题既不是关于如何捕获组的,也不是关于如何使用量词的,这两个正则表达式特性我非常熟悉。这更像是一个高级问题,适用于熟悉异类引擎中不寻常语法的正则表达式爱好者。
捕获量词
有没有人知道某种正则表达式语言是否允许你捕获量词?也就是说,像 + 和 * 这样的量词匹配的字符数会被计算,并且这个数字可以在另一个量词中再次使用。
例如,假设您想要确保在这种字符串中有相同数量的 L 和 R:LLLRRRRR
您可以想象一种语法,如下:
L(+)R{\q1}
捕获+量词应用于L的地方,并且在R的量词中通过{\q1}引用捕获的数字,对于字符串中的{@,=,-,/}数量平衡非常有用,例如:
@@@@ "星球大战"==== "1977" ---- "科幻小说" //// "乔治·卢卡斯"
与递归的关系
在某些情况下,量词捕获可以优雅地替代递归,例如由相同数量的L和R框定的文本片段,如下所示:
L(+) some_content R{\q1}
以下页面详细介绍了这个想法:Captured Quantifiers
它还讨论了对捕获的量词的自然扩展:量词算术,用于当您想要匹配(3 * x + 1)之前匹配的字符数时。
我正在试图找出是否存在类似的东西。
在此感谢您的见解!
更新
Casimir给出了一个非常好的答案,展示了两种验证模式中各个部分具有相同长度的方法。然而,我不想依赖其中任何一种进行日常工作。这些确实是展示卓越技巧的技巧。在我看来,这些美丽而复杂的方法证实了问题的前提:正则表达式功能捕获量词能够匹配的字符数,将使得这种平衡模式变得非常简单,并以一种愉悦和富有表现力的方式扩展语法。
更新2(很久以后)
我发现.NET有一个功能接近我所问的功能。添加了一个答案来演示该功能。