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

Java regex match number of times substring/char appears in string

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

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

p 之前的破折号数量必须与 q 之后的破折号数量(对于任何数量的破折号)相匹配才能成为有效的表达式。

我正在尝试制作这个 robust/generalizable(用户定义的规则,您可以使用 * 代替 -,您可以制作它以便您需要在 q 之后加倍数量的破折号,等等) ,我正在考虑添加一些特殊的文本(比如 -(%%n%%)p-q-(%%n%%) ,其中任何有 (%%n%%) 的东西都必须恰好出现 'n' 次),但在我这样做之前,有任何内置的正则表达式 capabilities/reasonably 简单的修复,还是我需要从我的 %% 开始?

提前致谢。


编辑:再看看我的问题,更好的表达方式是我本质上需要找出一种方法来标记两个(或可能更多)子字符串(以一般方式)以验证它们是否匹配。我在操作方式上有一定程度的灵活性(不仅限于正则表达式),但系统的其余部分使用正则表达式,所以不会 conflict/massively 使我需要做的事情变得过于复杂工作会很理想。

如果我答对了你的问题,正则表达式是不够的,因为你正试图捕捉由 non-regular 语法生成的字符串。一些简单的 pushdown automaton 在这里应该有所帮助。

如果你允许用户select前后的数字, 正则表达式是微不足道的。

一般来说,这是一种为before和after构造变量正则表达式的方法。

 ( -{1,10} )  # (1)
 p-q
            # Backreference to capture group 1

如果你想动态构造一个字符串,应该是这样的
"(-{1," + vNum + "})p-q\1"
您还可以像这样在后端添加量词
"(-{1," + vNum + "})p-q\1{" + nFactor + }"

您可以更改量词的形式以获得您需要的任何内容 {2} 或范围 {1,3} 等。 ..

不过请记住,捕获组包含您在后端所期望的子集。