Полагаю, мой вопрос лучше всего объяснить на (упрощенном) примере.
Regex 1:
^\d+_[a-z]+$
Regex 2:
^\d*$
регулярное выражение 1 будет никогда соответствовать строке, где регулярное выражение 2 соответствует.
Итак, допустим, что регулярное выражение 1 является ортогональным к регулярному выражению 2.
Как многие люди спрашивали, что я имел в виду под ортогональным Я постараюсь уточнить это:
Пусть S1 будет (бесконечным) набором строк, где соответствует регулярное выражение 1.
S2 - это набор строк, в которых совпадает регулярное выражение 2.
Регулярное выражение 2 ортогонально регулярному выражению 1 , если пересечение S1 и S2 пусто.
Регулярное выражение ^ \ 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);