正则表达式:“在捕获的至少一个必须匹配”

问题描述:

考虑下面的正则表达式:正则表达式:“在捕获的至少一个必须匹配”

/^(A....)?(B..)?(C...)?$/ 

有没有办法来限制正则表达式的方式说,“捕获的至少一个必须匹配“?

其实我需要这个Java正则表达式。我可以想象,这是不可能的。也许用更强大的Perl正则表达式机器?

当然,我可以后处理,但也许有另一种方式..

+2

如果您使用Java,为什么添加Perl标签? – ThisSuitIsBlackNot

+0

我认为没有办法:你必须后处理,以确保这个规则匹配。实际上,我怀疑Perl是否有这样的机制...... –

+1

你能举一个你的意思吗? – Sobrique

只要确保东西与前瞻匹配

/^(?=.)(A....)?(B..)?(C...)?$/ 
+0

伟大的答案!完美的作品。比前一个更好,因为后视是没有必要的。 –

您可以使用此模式:

^(A....)?(B..)?(C...)?(?<=.)$ 

末尾的零宽度断言确保总体匹配中至少有一个字符,它不会是如果没有任何组匹配任何情况。

正则表达式匹配模式:

/apples|bananas|carrots/

源文: This allows apples or bananas or carrots to appear anywhere in the source text, confirming that the source contains at least of of the choices. https://regex101.com/r/gZ1cW5/1

但是,正如我评论,目前尚不清楚你真正想要的。目前还不清楚你是否需要知道哪一个匹配。 您应该始终发布要评估的示例源文本。

+0

感谢您的回答。但它看起来很清楚,我想要什么,因为我收到了我的问题的非常确切的答案。 –