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