Java 正则表达式X和/或Y

Java 正则表达式X和/或Y,java,php,regex,Java,Php,Regex,考虑下面的正则表达式,其中X和Y是任意正则表达式 此正则表达式测试X和/或Y,但如果未找到“and”子句,则必须重新检查表达式 匹配X和/或Y的最佳方法是什么?[XY]+以获得任意数量的X和Y(因此包括xyxyx等) 或者 [XY]{1,2}选择1-2个Xs和Ys(仅包括您的4个示例)。对于X和/或Y的要求,该正则表达式如何: (?:(?=.*?X)|(?=.*?Y))(X|Y) 现场演示:正则表达式/XY?| YX?/应该能够匹配您列出的四种情况。然而,这是有限的,因为如果您使用的正则表达式

考虑下面的正则表达式,其中
X
Y
是任意正则表达式

此正则表达式测试
X
和/或
Y
,但如果未找到“and”子句,则必须重新检查表达式


匹配
X
和/或
Y
的最佳方法是什么?

[XY]+
以获得任意数量的X和Y(因此包括
xyxyx
等)

或者


[XY]{1,2}
选择1-2个Xs和Ys(仅包括您的4个示例)。

对于
X和/或Y
的要求,该正则表达式如何:

(?:(?=.*?X)|(?=.*?Y))(X|Y)

现场演示:正则表达式
/XY?| YX?/
应该能够匹配您列出的四种情况。然而,这是有限的,因为如果您使用的正则表达式有一个共同的匹配,您可能会得到意想不到的结果

信息有限,解决方案有限

如果这是一个问题,也许可以在问题上增加更多的要求

说明:


前半部分将尝试匹配
X
regex,然后尝试匹配
Y
regex
0
1
次。如果
X
regex失败,那么它将尝试下半部分;它将尝试匹配
Y
regex,然后将尝试匹配
X
regex
0
1
次。

@DevZer0匹配
X
Y
的缺失。那么
YX
呢?或者它只是
X
Y
XY
?然后定义一个类
[XY]
@DevZer0
X
Y
是任何正则表达式。如果它们是单个字符,那就行了,但我正在寻找通用的案例解决方案。像
/XY?| YX?/
?这样简单的东西怎么样?它允许
XX
YY
。字符类将不起作用(如注释中所述),因为
X
Y
代表任何东西,不仅仅是一个字符。当出现
X
和/或
Y
时,它匹配整行,而不仅仅是
X
和/或
Y
部分本身。如果出现X和/或Y,它匹配整行,如果X和Y都不存在,则行将不匹配。如果您不想匹配整行,您可以使用此链接中的正则表达式:就匹配而言,它现在基本上等同于简单的
X | Y
。出现的
XY
应该像这样匹配,但是您的正则表达式将它们分别匹配为
X
Y
(?:(?=.*?X)|(?=.*?Y))(X|Y)