正则表达式匹配X,Y或XY但不匹配空字符串

时间:2013-09-15 00:13:40

标签: java regex

我正在编写Java正则表达式模式,并遇到了我希望X或X或两者都没有空的情况。
因此,以下正则表达式模式可以正常工作。

(X)|(Y)|(XY)

但问题是X和Y可能很长,而且我必须写很多这类,这意味着很多冗余和维护问题。

(X)(Y)?不起作用,因为它可以匹配我不想要的null。

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解这个问题,但您可以使用否定前瞻来避免空白匹配?

^(?!^$)(X)?(Y)?$

否定前瞻(?! .. )如果其内容在该位置匹配则成功,因此在此实例中,整个模式仅在X或Y或两者都匹配,否则^$匹配,因此前瞻失败。

它假设这是整个匹配 - 如果有一个适当的锚点来确定一个匹配失败的原因,那么在较大模式的一部分中使用相同的概念。

否则,正如其他人已经建议的那样,将X和Y创建为字符串并从中构建模式将避免冗余。

答案 1 :(得分:0)

我认为有一种方法可以使用(仅仅)正则表达式。

我的建议:

  1. 你可以用别的东西建立正则表达式;例如通过扩展一个简单的模板来构建它们。

  2. 您可以看到是否有更好的方法来进行不涉及正则表达式的匹配。