10 000 регулярных выражений, а? Предложение Эрика Венделина об иерархии кажется хорошей идеей. . Думали ли вы о том, чтобы уменьшить масштабы этого регулярного выражения до чего-то вроде древовидной структуры?
В качестве простого примера: все регулярные выражения, требующие числа, могут ответвляться от одного регулярного выражения, проверяющего его, все регулярные выражения не требуют одного вниз по другой ветви. Таким образом вы можете сократить количество фактических сравнений до пути вдоль дерева вместо того, чтобы выполнять каждое сравнение в 10 000 единиц.
Для этого потребуется разложить предоставленное регулярное выражение на жанры, причем каждый жанр будет иметь общий тест, который исключит их в случае неудачи. Таким образом теоретически можно резко сократить количество фактических сравнений.
Если бы вам приходилось делать это во время выполнения, вы могли бы проанализировать заданные вами регулярные выражения и «разделить» их либо на предопределенные жанры (проще всего), либо на сравнительные жанры, созданные в тот момент (что не так просто).
Это решение не поможет вашему примеру сравнения "hello" с "[H | h] ello" и ". {0,20} ello". Простой случай, когда это может быть полезно: если у вас есть 1000 тестов, которые вернут истину только в том случае, если где-то в строке существует «ello», а ваша тестовая строка - «до свидания»; вам нужно будет провести только один тест на "ello" и знать, что 1000 тестов, требующих этого, не будут работать, и из-за этого вам не придется их выполнять.
person
akdom
schedule
10.10.2008