我想我的问题最好用一个(简化的)例子来解释.
正则表达式1:
^\d+_[a-z]+$
Run Code Online (Sandbox Code Playgroud)
正则表达式2:
^\d*$
Run Code Online (Sandbox Code Playgroud)
正则表达式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);
Run Code Online (Sandbox Code Playgroud)