我有一个相当冗长的正则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)?
如果下一个序列是A
或B
或C
,则这只与匹配。 在任何其他情况下(其中(A)?(B)?(C)?
将匹配一个空字符串),由于前瞻,将不会有匹配。
这有缺点,你的序列被检查两次 – 但我真的不知道任何方式。