我想用一个(简化的)例子来解释我的问题。
正则表达式 1:
^\d+_[a-z]+$
正则表达式 2:
^\d*$
正则表达式1不会匹配正则表达式2匹配的字符串。因此,我们可以说正则表达式1是与正则表达式2正交的。
由于许多人询问我所说的“正交”的含义,我将尝试澄清:
令S1成为正则表达式1匹配的(无限)字符串集合。S2是正则表达式2匹配的字符串集合。如果S1和S2的交集为空,则正则表达式2与正则表达式1正交。例如,正则表达式'^\d_a$'不是正交的,因为字符串'2_a'在集合S1和S2中。
如何确定两个正则表达式是否正交?
最好的情况是使用一些库来实现像下面这样的方法:
/**
* @return True if the regex is orthogonal (i.e. "intersection is empty"), False otherwise or Null if it can't be determined
*/
public Boolean isRegexOrthogonal(Pattern regex1, Pattern regex2);