2016-09-12 5 views
-2

У меня есть переменная, имеющая некоторый URL-адрес и файл, содержащий 100 регулярных выражений. Как я могу найти, какое регулярное выражение/s будет верно для этой переменной. Я не хочу делать соответствие шаблону для каждого шаблона в файле. Ищете эффективное решение.Поиск всех регулярных выражений/s из значения

+0

Вы сравнили образец соответствия шаблону на каждом из шаблонов? Если да, то каковы были результаты и на что вы нацелены? – john01dav

+4

* Я не хочу делать совпадение шаблонов для каждого шаблона в файле. * И мои дети не хотят вставать и ходить в школу утром. Удачи с этим! –

+0

Если вы хотите, чтобы список из нескольких сотен регулярных выражений соответствовал заданной строке, существует не так много возможных решений. – AntonH

ответ

0

Хотя, в конечном счете, вы не уйдете с «истинным» эффективным решением, есть несколько простых эвристик, которые вы можете использовать, чтобы помочь сократить количество шаблонов, которые вам нужно оценить.

Например, попробуйте «группировать» узоры с использованием упрощенных версий. Рассмотрим две модели

[a-z]\d[a-z] 
[a-z]{3} 

Любая строка, соответствующая оба этих моделей также будет соответствовать шаблону [a-z].[a-z]. Если вы пропустите предыдущие два шаблона, если более общий шаблон не соответствует, вы (вероятно) сохраните на общем времени обработки. Чем больше вы можете обобщить, тем больше шаблонов вы сможете устранить сразу. Конечное выражение этого является иерархическим, в котором шаблоны следуют за файловой системой, подобной организации групп. В то время как наихудшая производительность этой системы хуже, чем просто проверка всех шаблонов, средний случай, вероятно, будет несколько лучше, если будут устранены различные группы шаблонов.

Вы не будете лучше, чем O(n) производительности по количеству регулярных выражений, но вы, скорее всего, получите сбережения по коэффициенту n.

Смежные вопросы