preg_match_all и новые строки внутри кавычек

Еще одна проблема / вопрос regex noob. Я, наверное, делаю что-то глупое, поэтому я думал, что буду использовать общую изобретательность постоянных членов SO;)

Попытка сопоставить символы новой строки, но только в случае двойных кавычек или одинарных кавычек. Я также хочу поймать строки, которые находятся между кавычками, но не содержат новых строк.

Ладно, вот что я получил, с выходом. Ниже этого будет выход, который я хотел бы получить. Любая помощь будет принята с благодарностью! 🙂

Я использую Regex Coach, чтобы помочь мне создать мои шаблоны, будучи новичком и всеми. По словам RC, предложение I типа соответствует всем событиям в данных, но на моем PHP он пропускает многострочную часть. Я уже пробовал с модификатором шаблона «m», но безрезультатно.

Содержание $ CompressedData:

<?php $Var = "test"; $Var2 = "test2"; $Var3 = "blah blah blah blah blah blah blah blah blah"; $Var4 = "hello"; ?> 

Шаблон / код:

 preg_match_all('!(\'|")(\b.*\b\n*)*(\'|")!', $CompressedData, $Matches); 

Текущий вывод print_r из $ Матчи:

 Array ( [0] => Array ( [0] => "test" [1] => "test2" [2] => "hello" ) ... } 

DESIRED print_r выход $ Матчи:

 Array ( [0] => Array ( [0] => "test" [1] => "test2" [2] => "blah blah blah blah blah blah blah blah blah" [3] => "hello" ) ... } 

Модификатор m не делает совпадение точек совпадающими. Вот для чего нужен s модификатор. m создает начало и конец строки ^ и $ в дополнение к началу / концу строки.

Попробуйте /(\'|")((?:(?!\1).)*)\1/s

Объяснение:

(\'|") : Сопоставить одну или двойную кавычку. Помните, какой из них был в backreference \1 .

(?:(?!\1).) : Сопоставьте любой символ, если он не является символом открытия (в \1 ).

(...*) : Повторяйте как можно чаще и фиксируйте совпадение в backreference \2 .

\1 : сопоставьте символ открытой цитаты.

 $str=<<<'EOF' <?php $Var = "test"; $Var2 = "test2"; $Var3 = "blah blah blah blah blah blah blah blah blah"; $Var4 = "hello"; ?> EOF; $s = preg_replace('/<\?php|\?>/sm',"",$str); $s = preg_split("/.*=/",$s); print_r($s);