Попробуйте Regexp :: Assemble , как предлагается в посте, на который вы ссылаетесь, и сравните его с итеративным подходом, подобным grep
. Regexp :: Assemble должен дать самое быстрое решение, поскольку Perl может оптимизировать объединенные регулярные выражения, а не сканировать целую строку для каждого. Так как вы не знаете свой вклад заранее, ymmv.
Какая версия Perl, которую вы используете, повлияет на производительность. 5.10 ввел много оптимизаций именно для этой цели (см. « попытки »). Одним из наиболее распространенных вариантов использования являются сканеры спама, такие как SpamAssassin, которые создают большое регулярное выражение для всех шаблонов, которые они сканируют, точно так же как Regexp :: Assemble.
Наконец, так как ваш ввод настолько велик, возможно, стоит собрать регулярное выражение в файл и затем запустить grep -P -f $regex_file $big_file
. -P
говорит grep
использовать Perl-совместимые регулярные выражения. Файл используется, чтобы избежать цитирования оболочки или ограничений размера команд. grep
может взорвать двери от Perl.
В конце концов, вам придется провести сравнительный анализ.