Показать сообщение отдельно
Старый 14.01.2012, 22:12
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 2  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Цитата:
Сообщение от ProxyGreen Посмотреть сообщение
Во первых бывают разные механизмы регулярок: дка и нка ((не)детерминированный конечный автомат).
И те и другие используются только для автоматных грамматик. Грамматики с back references - это другой класс грамматик и никакими нка не разбираются.
Цитата:
дка всегда, независимо от написания выражения работает очень быстро, но уступает нка в возможностях.
Это неправда. По нка достаточно легко сторится полностью эквивалентный ему дка.
Цитата:
нка же очень зависит о самого выражения, используемых в нём конструкций, например (н|к|а) будет работать в разы медленнее чем [нка] и т.д.
Не будет. Они будут работать одинаково. Эти две грамматики вообще эквивалентны и автоматы для них будут одинаковы. Более того, если проверять строку на совпадение (а не для поиска подстроки), то даже будут совпадать автоматы для нка и дка.
Цитата:
Зато нка легко поддерживает возможности ссылок, сохранения участков совпадения, опережающих и ретроспективных проверок и другие няшечки, без которых некоторые задачи ни как не решить.
И опять не нка. backreferences не обрабатываются НКА (в классическом определении НКА). В большинстве движков регулярных выражений не конечный автомат.
Цитата:
Сам нка делится ещё на классический нка, который при первом совпадении выдаёт результат. И на POSIX нка, который продолжает перебирать текст пока не найдёт самое длинное совпадение, естественно он работает ещё медленнее чем нка.
Не, это не нка делится . Конечный автомат - это вполне определенная штука. Ну и в силу определения нка дольше него грамматику разбирать нельзя. Он и так все возможные разборы строки генерирует стразу. Выбрать самое длинное из его результатов - мелочи.