如果在3个否则可选的正则expression式expression式中至less有1个字符匹配,则需要“不匹配”

我有一个相当冗长的正则expression式由3个部分组成,所有这些都是可选的,但有前提条件,至less要匹配一个单独的字符。

为简洁起见,我们称这三个长段(A),(B)和(C)。

目前,它们是这样编码的:

(A)?(B)?(C)? 

当然,这并不强制执行前提条件。

我知道,我能做到

 ((A)(B)?(C)?)|((A)?(B)(C)?)|((A)?(B)?(C)) 

在每个分支中,一个部分是强制性的。

但是,由于这些表情真的很长,我最终会陷入一片混乱。

是否有某种限定词来强制((A)?(B)?(C)?)直接执行(即,如果至less有一个字符不匹配,则不匹配)?

您可以使用前视来检查是否存在至少一个部分。

 (?=A|B|C)(A)?(B)?(C)? 

如果下一个序列是ABC ,则这只与匹配。 在任何其他情况下(其中(A)?(B)?(C)?将匹配一个空字符串),由于前瞻,将不会有匹配。

这有缺点,你的序列被检查两次 – 但我真的不知道任何方式。