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