Удаляет ли QRegularExpression обратные ссылки (и в результате ускоряет поиск)

Беглый взгляд на документацию по QRegexp показывает, что он поддерживает обратные ссылки, в то время как QRegularExpression не упоминает об этом. Это было бы примечательно, поскольку сопоставление регулярных выражений без обратных ссылок может масштабироваться за линейное время, в то время как обратные ссылки масштабируются как экспоненциальное время (источник [мертвая ссылка], кэшированная версия).

Подобный StackOverflow ответ Также упоминаются основные различия в скорости исполнения. Было бы логично предположить, что новый класс регулярных выражений может использовать новый алгоритм, который позволил бы ему выполнять поиск за линейное время, однако я не знаю об этом напрямую. Есть ли различия, похожие на вышеперечисленные в новом QRegularExpression учебный класс?

3

Решение

QRegularExpression отходит от функциональности QRegExp в 5 конкретных областях:

  1. Поддержка для \A а также \z
  2. Поддержка глобального соответствия
  3. Удаление подстановочных знаков
  4. Удаление поддержки низших синтаксисов регулярных выражений (теперь поддерживаются только Perl-совместимые регулярные выражения (PCRE))
  5. Добавлена ​​поддержка *? а также +? модификаторы
  6. Удалена поддержка ненужного QRegExp::CaretModes за исключением QRegExp::CaretAtOffset

Из этих изменений 4 очень актуален для этого вопроса. PCRE — безусловно самый продвинутый доступный механизм регулярных выражений. Так что он, безусловно, поддерживает обратные ссылки, а также многие другие функции QRegExp никогда не мог стремиться.

Поскольку обоснование отсутствия явного упоминания всех функций, предоставляемых PCRE, связано с тем фактом, что PCRE определяется документом из 70 тыс. Слов. Если вы хотите прожечь тонер-картридж, QRegularExpression ссылки непосредственно на эту страницу: http://pcre.org/pcre.txt

Между прочим, приведенные цитаты из этого тома — это синтаксис обратной ссылки, поддерживаемый PCRE:

  • \n ссылка по номеру (может быть неоднозначной)
  • \gn ссылка по номеру
  • \g{n} ссылка по номеру
  • \g{-n} относительная ссылка по номеру
  • \k<name> ссылка по имени (Perl)
  • \k'name' ссылка по имени (Perl)
  • \g{name} ссылка по имени (Perl)
  • \k{name} ссылка по имени (.NET)
  • (?P=name) ссылка по имени (Python)
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]