Образец (["'])(?:(?=(\\?))\2.)*?\1
выше выполняет эту работу, но меня беспокоят ее выступления (это неплохо, но может быть лучше). Мина ниже ее на 20% быстрее.
Шаблон "(.*?)"
просто неполный. Мой совет для всех, кто это читает, просто НЕ ИСПОЛЬЗУЙТЕ ЭТО !!!
Например, он не может захватить много строк (при необходимости я могу предоставить исчерпывающий тестовый сценарий), как показано ниже:
$ string = 'Как вы? I
blockquote>\'
m fine, thank you ';Остальные из них так же хороши, как и выше.
Если вам действительно нравятся производительность и точность затем начинаются с одного ниже:
/(['"])((\\\1|.)*?)\1/gm
В моих тестах он охватывал каждую строку, которую я встречал, но если вы найдете что-то, что не работает, я бы с радостью обновил это для вас.