我正在编写 Java 正则表达式模式并且遇到了我期望 X 或 X 或两者但没有 null 的情况。
因此,以下正则表达式模式适用于此。
(X)|(Y)|(XY)
但问题是 X 和 Y 可能很长,我必须写很多这样的东西,这意味着很多冗余和维护头痛。
(X)?(Y)? 不起作用,因为它可以匹配我不想要的 null 。
我不确定我是否理解这个问题,但是您可以使用否定的前瞻来避免空白匹配吗?
^(?!^$)(X)?(Y)?$
如果它的内容在该位置不匹配,则否定前瞻(?!
..成功,因此在这种情况下,整个模式只有在 X 或 Y 或两者都匹配时才成功,否则匹配,因此前瞻失败。)
^$
它假定这是匹配的全部 - 对于在更大模式的一部分中使用,如果有适当的锚来确定匹配失败将是什么,则可以使用相同的概念。
否则,正如其他人已经建议的那样,将 X 和 Y 创建为字符串并从中构建模式将避免冗余。
我认为没有办法使用(仅)正则表达式来做到这一点。
我的建议:
您可以从其他东西构建正则表达式;例如,通过扩展一个简单的模板来构建它们。
您可以看看是否有更好的方法来进行不涉及正则表达式的匹配。