Java正则表达式匹配次数substring / char出现在字符串中

时间:2017-02-13 17:01:36

标签: java regex formal-languages

我正在编写程序以识别有效(由用户定义)表达式,并且我需要能够匹配特定字符在一个部分与另一个部分匹配的次数。例如,如果我正在使用pq系统,请

(some number of dashes)p-q(some number of dashes)

在p必须与q之后的破折号(对于任意数量的破折号)匹配之前的破折号,以使其成为有效表达式。

我试图制作这种强大/可推广(用户定义的规则,你可以使用*而不是 - ,你可以使它在q之后需要加倍的破折号等),I正在考虑添加一些特殊文本(例如-(%%n%%)p-q-(%%n%%),其中(%%n%%)之后的任何内容必须完全出现' n'次,但在此之前是否有任何内置的正则表达式功能/相当简单的修复,还是我需要从我的%%'开始?

提前致谢。

编辑:再看一下我的问题,更好的说法是我基本上需要找出一种方法来标记两个(或可能更多)子串(以一般方式)来验证它们是否匹配。我在如何操作方面有一定程度的灵活性(不仅仅局限于正则表达式),但系统的其余部分使用正则表达式,因此不会发生冲突/大规模过分复杂化我需要做的事情才能获得它的工作将是理想的。

2 个答案:

答案 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} 等范围......

请记住,捕获组包含您在后端所期望的部分。