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