Powiedzmy, że mamy taki string:
$string=' blah<br> @include (\'file_to_load\') <br> @include (\'file_to_load\',\'param1\',\'param2\',\'param3\') ';
Chcę złapać (i ewentualnie zastąpić funkcją preg_replace_callback) wszystkie wystąpienia @include wraz z ich parametrami, robię więc:
$string=' blah<br> @include (\'file_to_load\') <br> @include (\'file_to_load\',\'param1\',\'param2\') '; $params=[]; '~@include \((,?.*?)\)~',//łapię @include, nawiasy i wszystko między nimi function ($matches) { return $matches[1]; }, $string );
No i działa OK, tzn. łapię to @include wraz z parametrami
Problem pojawia się, gdy w $stringu źródłowym, w samym parametrze pojawi się przecinek. Np:
$string=' blah<br> @include (\'file_to_load\') <br> @include (\'file_to_load\',\'param1,coś tam\',['elem'=>'też, przecinek']]) ';
Tutaj w okolicach "param1" oraz czegoś co ma być arrayem są przecinki, chciałbym by były one elementem tego parametru, niestety oczywiście po użyciu funkcji "explode" ona widzi te przecinki i powstają bzdury.
Co mam zrobić, by przecinki będące w apostrofach były brane dosłownie, a nie były rozdzielnikiem parametrów?