我有一个相当冗长的正则表达式,由3个部分组成,所有部分都是可选的,但必须具备前提条件,即必须至少匹配它们中的一个单个字符。
为简洁起见,我们将这三个长节(A),(B)和(C)称为。
目前,它们以这种方式编码:
(A)?(B)?(C)?
当然不会强制执行先决条件。
我知道,我可以做到
((A)(B)?(C)?)|((A)?(B)(C)?)|((A)?(B)?(C))
在每个Or
分支中强制执行一部分。
但由于这些表达方式确实很长,我最终会陷入混乱。
是否有某种限定符可以直接在((A)?(B)?(C)?)
强制执行(即如果不匹配,则不匹配)?
答案 0 :(得分:2)
您可以使用前瞻来检查至少一个部分是否存在。
(?=A|B|C)(A)?(B)?(C)?
如果下一个序列为A
或B
或C
,则仅匹配。在任何其他情况下((A)?(B)?(C)?
匹配空字符串),由于前瞻而没有匹配。
这有缺点,你的序列是序列被检查两次 - 但我真的不知道如何。