-1

我正在编写 Java 正则表达式模式并且遇到了我期望 X 或 X 或两者但没有 null 的情况。
因此,以下正则表达式模式适用于此。

(X)|(Y)|(XY)

但问题是 X 和 Y 可能很长,我必须写很多这样的东西,这意味着很多冗余和维护头痛。

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

4

2 回答 2

1

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

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

如果它的内容在该位置匹配,则否定前瞻(?!..成功,因此在这种情况下,整个模式只有在 X 或 Y 或两者都匹配时才成功,否则匹配,因此前瞻失败。)^$

它假定这是匹配的全部 - 对于在更大模式的一部分中使用,如果有适当的锚来确定匹配失败将是什么,则可以使用相同的概念。

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

于 2013-09-15T00:42:03.703 回答
0

我认为没有办法使用(仅)正则表达式来做到这一点。

我的建议:

  1. 您可以从其他东西构建正则表达式;例如,通过扩展一个简单的模板来构建它们。

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

于 2013-09-15T00:33:50.300 回答