Если у вас есть два регулярных выражения и набор примеров входных данных, вы можете попробовать сопоставить каждый вход с каждым регулярным выражением. Для каждого ввода:
- Если они оба совпадают или оба не совпадают, наберите 0.
- Если один из них совпадает, а другой нет, наберите 1.
Суммируйте этот результат по всем входным данным, и это даст вам «расстояние» между регулярными выражениями. Это даст вам представление о том, как часто два регулярных выражения будут различаться для типичного ввода. Это будет очень медленно вычислять, если ваш набор входных данных большой. Это не будет работать вообще, если оба регулярных выражения не будут совпадать почти со всеми случайными строками, а ваш ожидаемый ввод будет полностью случайным. Например, регулярное выражение 'sgjlkwren' и регулярное выражение 'ueuenwbkaalf', вероятно, никогда не совпадут ни с чем, если их проверять на случайном вводе, поэтому в этой метрике расстояние между ними будет равно нулю. Это может или не может быть то, что вы хотите (вероятно, нет).
Возможно, вы сможете проанализировать структуру регулярного выражения и использовать смещенную случайную выборку, чтобы преднамеренно использовать строки, которые совпадают чаще, чем при полностью случайном вводе. Например, если оба регулярных выражения требуют, чтобы строка начиналась с 'foo', вы могли бы убедиться, что ваши тестовые входы также всегда начинаются с foo, чтобы не тратить время на тестирование строк, которые, как вы знаете, не сработают для обоих.
Итак, в заключение: если у вас нет очень специфической ситуации с ограниченным набором ввода и / или ограниченным языком регулярных выражений, я бы сказал, что это невозможно. Если у вас есть некоторые ограничения на ввод и регулярное выражение, это может быть возможно. Пожалуйста, укажите, что это за ограничения, и, возможно, я смогу придумать что-нибудь получше.