Я работаю в Javascript, но я думаю, что это общий регулярный вопрос.Оптимизация определенного регулярного выражения для равноудаленных букв
Я пишу скрипт, который ищет подстроки в длинной строке с равными расстояниями между буквами. Например, в тексте a11b22c33d44
у нас есть строка abcd
с расстоянием 2 между каждыми двумя последовательными буквами.
Это тривиально, чтобы найти такие строки, используя поиск в регулярном выражении: для примера выше, мне просто нужно найти regexp /a.{2}b.{2}c.{2}d/
. Итак, что я делаю сейчас, это следующее: если вы хотите найти слово и расстояние между последовательными буквами, я просто поставлю .{n}
между ними (где n - это расстояние), скомпилируйте это как регулярное выражение и дайте ему сделать остальную работу ,
Это хорошо работает на практике, пока расстояние между буквами невелико - скажем, около 1000. Впоследствии он становится медленным. Он по-прежнему работает, но я надеюсь, что есть еще один способ более эффективного выполнения одного и того же поиска; Я не вижу очевидной причины, почему для больших разрывов она должна быть значительно медленнее (нам все равно нужно переходить весь текст только один раз, верно?)
Вы пример regexp 'a. {2} b. {2} c. {2} d' также будут соответствовать' aaabbbcccd' - это намеренно? – hochl
Да, поскольку aaabbbcccd по-прежнему содержит «abcd» в качестве подстроки с расстоянием 2 между буквами. –