我想我的问题最好用一个(简化的)例子来解释。
正则表达式 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);