Неизвестный модификатор в моем коде

<? php
    $Src = 'images/pages/clients/logos/clnt_aljareera_img.jpg';
    $pttn= '/&Src:'.$Src.'/';
    $string=preg_replace($pttn,'',$string,1);
?>

//Ошибка вывода: Неизвестный модификатор 'p' в


person fhonics    schedule 22.10.2012    source источник


Ответы (2)


Ваша строка содержит целый беспорядок /, который необходимо экранировать как \/ при использовании / в качестве разделителя регулярных выражений. Вместо / в качестве разделителей регулярных выражений используйте что-то, что не будет встречаться в вашей строке, например, ~. Однако вы должны выбрать символ-разделитель, который гарантированно не появится в $Src. Вы можете быть в большей безопасности даже с |, чем с ~.

$Src = 'images/pages/clients/logos/clnt_aljareera_img.jpg';
// Delimit the regular expression with ~
$pttn= '~&Src:'.$Src.'~';
$string=preg_replace($pttn,'',$string,1);

Случилось так, что ваше регулярное выражение, разделенное /, встречает p сразу после images/, потому что считает, что достигло закрывающего разделителя. Следующее слово pages ошибочно воспринимается как строка модификаторов регулярных выражений.

PHP видит регулярное выражение:

/&src:images/pages
person Michael Berkowski    schedule 22.10.2012
comment
скорость света. спасибо приятель. - person fhonics; 22.10.2012

Удалите пробел в открывающем php-теге.

person mboldt    schedule 22.10.2012
comment
Это почти похоже на проблему (и это действительно проблема), но модификатор unknown является результатом images/p, когда регулярное выражение думает, что встречает закрывающий разделитель /, за которым следует p. - person Michael Berkowski; 22.10.2012
comment
Вы правы, открывающийся php-тег приводит только к синтаксической ошибке ... это просто бросилось мне в глаза, и я думаю, ему все равно нужно было бы это исправить ;-) - person mboldt; 22.10.2012
comment
На самом деле это может привести к Parse error: syntax error, unexpected T_VARIABLE - person Michael Berkowski; 22.10.2012