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

Java 正则表达式匹配X、Y或XY,但不是空字符串,java,regex,Java,Regex,我正在编写Java正则表达式模式,遇到了一种情况,我期望X或X或两者都有,但没有空值。 因此,下面的正则表达式模式可以很好地解决这个问题 (十) |(Y)|(XY) 但问题是X和Y可能相当长,我必须编写大量此类代码,这意味着大量冗余和维护问题 (十) ?(Y)?不起作用,因为它可以匹配我不想要的null。我认为没有一种方法可以使用(仅)正则表达式来实现这一点 我的建议是: 您可以从其他内容构建正则表达式;e、 g.通过扩展一个简单的模板来构建它们 您可以看看是否有更好的方法进行匹配,而不涉及正则

我正在编写Java正则表达式模式,遇到了一种情况,我期望X或X或两者都有,但没有空值。
因此,下面的正则表达式模式可以很好地解决这个问题

(十) |(Y)|(XY)

但问题是X和Y可能相当长,我必须编写大量此类代码,这意味着大量冗余和维护问题


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

我认为没有一种方法可以使用(仅)正则表达式来实现这一点

我的建议是:

  • 您可以从其他内容构建正则表达式;e、 g.通过扩展一个简单的模板来构建它们

  • 您可以看看是否有更好的方法进行匹配,而不涉及正则表达式


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

    ^(?!^$)(X)?(Y)?$
    
    如果负前瞻
    (?!
    的内容在该位置不匹配,则该模式将成功,因此在本例中,只有当X或Y或两者匹配时,整个模式才会成功,否则将匹配
    ^$
    ,因此前瞻将失败

    它假设这是匹配的全部-对于较大模式的一部分,如果有适当的锚来确定匹配失败的原因,则可以使用相同的概念


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

    nhahtdh,目的是不匹配空字符串,不是吗?如果他们这样做了,那么被问的问题就没有意义了?(至少,
    量词是多余的。)