Я работаю над этим некоторое время. Когда я исследовал предупреждение PHP, я считаю, что следующий код PHP требует разделителей на последней половине, чтобы заставить его работать.

Вот код,

$pee = preg_replace('!<p><!--(.*?)--></p>!ise', " '<!--' .  stripslashes(clean_pre('$1'))  . '-->' ", $pee);

Это предупреждение, которое я получаю,

Предупреждение: preg_replace (): Неизвестный модификатор '-'

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

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

Я новичок в PHP, ценю вашу помощь.

Благодарность

0
Mark2090 28 Ноя 2017 в 01:36

1 ответ

Лучший ответ

Если вы используете ! для окружения своего регулярного выражения, вам также необходимо экранировать этот символ в шаблоне:

!<p><!--(.*?)--></p>!ise
     ^ This needs escaping.

Вы должны быть в состоянии использовать это:

$pee = preg_replace('!<p><\!--(.*?)--></p>!ise', " '<!--' .  stripslashes(clean_pre('$1'))  . '-->' ", $pee);

(или просто выберите другой разделитель (/ и т. д.).

Причина, по которой вы получаете эту ошибку, заключается в том, что - - это первый символ, следующий за !, поэтому PHP предполагает, что вы предоставляете его в качестве первого модификатора.

Изменить: как упоминалось в @ chris85, модификатор e больше не является хорошей практикой, см. Этот вопрос для получения совета по обновлению кода: Заменить модификатор preg_replace () e на preg_replace_callback

2
iainn 27 Ноя 2017 в 22:49