首先,让我解释一下,这个问题既不是关于如何捕获组,也不是关于如何使用量词,这是我非常熟悉的正则表达式的两个特征.对于可能熟悉异国情调引擎中不寻常语法的正则表达式爱好者而言,这是一个更高级的问题.
捕捉量词
有谁知道正则表达式的味道是否允许你捕捉量词?通过这个,我的意思是计数与+和*等量词匹配的字符数将被计算,并且这个数字可以在另一个量词中再次使用.
例如,假设您要确保在此类字符串中具有相同数量的Ls和Rs:LLLRRRRR
你可以想象一下这样的语法
L(+)R{\q1}
Run Code Online (Sandbox Code Playgroud)
其中捕获了L的+量词,并且在R的量词中将捕获的数字称为{\ q1}
这对平衡{@,=, - ,/}在字符串中的数量很有用,例如@@@@"星球大战"===="1977"----"科幻小说"////"乔治卢卡斯"
与递归的关系
在某些情况下,量词捕获会优雅地替换递归,例如由相同数量的Ls和Rs构成的一段文本,a in
L(+) some_content R{\q1}
Run Code Online (Sandbox Code Playgroud)
这个想法在下面的页面中有一些细节:Captifured Quantifiers
它还讨论了捕获量化的自然扩展:量化算术,适用于您希望匹配(3*x + 1)之前匹配的字符数的情况.
我试图找出这样的事情是否存在.
在此先感谢您的见解!
更新
Casimir给出了一个很棒的答案,它显示了两种方法来验证模式的各个部分具有相同的长度.但是,我不想在日常工作中依赖其中任何一种.这些都是表现出色表演的伎俩.在我看来,这些美丽但复杂的方法证实了这个问题的前提:一个正则表达式特征来捕获量化的字符数(例如+或*)能够匹配将使这种平衡模式非常简单并扩展语法一种令人愉快的表达方式.
更新2(稍后)
我发现.NET有一个接近我所询问的功能.添加了演示该功能的答案.