Еще одна проблема / вопрос 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);