Предупреждение: вы не заключили свое регулярное выражение в разделители.Поэтому попробуйте
$text = preg_match('#<%TAG%[^>]*>(.*?)</%TAG%>#',$search_string, $matches);
Понимание предупреждения.
Рассмотрите свое регулярное выражение:
'<%TAG%[^>]*>(.*?)</%TAG%>'
^ ^
start end
Поскольку вы явно не ставите регулярное выражение междуdelimiter, PHP считает, что вы используете <
и >
в качестве разделителя, так как <
- первый символ в регулярном выражении.Следовательно, когда он видит неотбегший <
, он принимает это как конец паттерна.Далее у нас может быть несколько модификаторов после закрывающего разделителя, которые позволяют нам изменять поведение сопоставления с образцом.Некоторые общие модификаторы:
i
для нечувствительного к регистру m
для многострочного соответствия
Теперь в вашем случае есть (
после закрывающего разделителя, который не является допустимым модификатором, отсюда и предупреждение.