我正在编写程序以识别有效(由用户定义)表达式,并且我需要能够匹配特定字符在一个部分与另一个部分匹配的次数。例如,如果我正在使用pq系统,请
(some number of dashes)p-q(some number of dashes)
在p必须与q之后的破折号(对于任意数量的破折号)匹配之前的破折号,以使其成为有效表达式。
我试图制作这种强大/可推广(用户定义的规则,你可以使用*而不是 - ,你可以使它在q之后需要加倍的破折号等),I正在考虑添加一些特殊文本(例如-(%%n%%)p-q-(%%n%%)
,其中(%%n%%)
之后的任何内容必须完全出现' n'次,但在此之前是否有任何内置的正则表达式功能/相当简单的修复,还是我需要从我的%%'开始?
提前致谢。
编辑:再看一下我的问题,更好的说法是我基本上需要找出一种方法来标记两个(或可能更多)子串(以一般方式)来验证它们是否匹配。我在如何操作方面有一定程度的灵活性(不仅仅局限于正则表达式),但系统的其余部分使用正则表达式,因此不会发生冲突/大规模过分复杂化我需要做的事情才能获得它的工作将是理想的。
答案 0 :(得分:0)
如果我的问题正确,正则表达式是不够的,因为你试图捕获非常规语法生成的字符串。一些简单的pushdown automaton应该有帮助。
答案 1 :(得分:0)
如果您允许用户选择之前和之后的数量, 正则表达式将是微不足道的。
通常,这是一种为之前和之后构造变量正则表达式的方法。
( -{1,10} ) # (1)
p-q
\1 # Backreference to capture group 1
如果你想动态构造一个字符串,那就像这样
"(-{1," + vNum + "})p-q\\1"
您也可以像这样在后端添加量词
"(-{1," + vNum + "})p-q\\1{" + nFactor + }"
您可以更改量词的表单,以获得您需要的任何内容 {2} ,或 {1,3} 等范围......
请记住,捕获组包含您在后端所期望的部分。