Я думаю, @Tim Pietzcker дал лучшее объяснение по поводу возврата.
Через различные тесты (включая мои собственные) это быстрые пути:
Способ 1, развертывание
" [^"\\]* (?: \\. [^"\\]* )* "
Метод 2, чередование
" (?: \\. | [^"\\]+ )* "
Метод 1, может превзойти 2 по значительным запасам.
информация
Я думаю, что действительно трудно объяснить катастрофический откат назад. Даже распознать это иногда трудно, если только по времени это не очевидно. Затем в приложениях, критичных ко времени, иногда полезно выполнить некоторые тесты.
В этой теме цитирования мне нравится добавлять новые подходы в шаблонный скрипт perl (5.10 engined), чтобы увидеть, как он работает. Каждый двигатель немного отличается. Если вам не все равно, вот образец.
Примеры регулярных выражений в зависимости от времени с использованием строки в кавычках и с экранированием
Прошло 100 000 раз каждый.
(?x-ism:" ( (?: \\?. )*? ) ")
Код занял: 14,7031 сек. (с часами 14,58 грн. + 0,00 сис = 14,58 ед. ЦП)
(?x-ism:" (.*? (?<!\\) (?:\\{2})* ) ")
Код занял: 12,8435 сек. (с 12,75 грн. + 0,00 сис = 12,75 процессора)
(?x-ism:" ( (?: [^\\"] | \\. )* ) ")
Код занял: 10,3123 сек. (10,27 грн + 0,00 сис = 10,27 процессор)
(?x-ism: " ( (?: [^"\\]+ | (?:\\.)+ )* ) " )
Код занял: 8,39063 сек. (8,39 долл. США + 0,00 сис = 8,39 ЦП)
(?x-ism: " ( (?: [^"\\]+ | \\. )* ) " )
Код занял: 8,7498 сек. (8,75 долл. + 0,00 сис = 8,75 процессора)
(?x-ism: " ( (?: \\. | [^"\\]+ )* ) " )
Код занял: 8,5623 сек. (8,44 грн. + 0,00 сис = 8,44 ед. ЦП)
(?x-ism: " ( [^"\\]* (?: \\. [^"\\]* )* ) " )
Код занял: 7,79661 сек. (7,80 долл. США + 0,00 сис. = 7,80 ЦП)
(?x-ism: (?> " ( (?: [^"\\] | \\. )* " ) ) )
Код занял: 10,5156 сек. (10,52 грн. + 0,00 сис = 10,52 ед. ЦП)