Синтаксическая ошибка, неожиданный T_LNUMBER, ожидаемый T_VARIABLE или '$'
Я собираюсь Syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$'
Это код, который я использую
function wpse44503_filter_content( $content ) {
$regex = '#src=("|\')'.
'(/images/(19|20)(0-9){2}/(0|1)(0-9)/[^.]+\.(jpg|png|gif|bmp|jpeg))'.
'("|\')#';
$replace = 'src="'.get_site_url( $2 ).'"';
$output = preg_replace( $regex, $replace, $content );
return $output;
}
Это линия, где я получаю эту ошибку $replace = 'src="'.get_site_url( $2 ).'"';
Может кто-нибудь помочь мне это исправить? Спасибо
5 ответов
То, что вы пытаетесь сделать (т.е. заменить совпавшую строку на результат вызова функции), не может быть сделано с помощью preg_replace
вам нужно будет использовать preg_replace_callback
вместо этого, чтобы получить функцию, вызываемую для каждого совпадения.
Краткий пример preg_replace_callback;
$get_site_url = // Returns replacement
function($row) {
return '!'.$row[1].'!'; // row[1] is first "backref"
};
$str = 'olle';
$regex = '/(ll)/'; // String to match
$output = preg_replace_callback( // Match, calling get_site_url for replacement
$regex,
$get_site_url,
$str);
var_dump($output); // output "o!ll!e"
Вы не можете иметь $2 в качестве имени переменной. Он должен начинаться с буквы или подчеркивания.
http://php.net/manual/en/language.variables.basics.php
Имена переменных следуют тем же правилам, что и другие метки в PHP. Допустимое имя переменной начинается с буквы или подчеркивания, за которым следует любое количество букв, цифр или подчеркивания. Как регулярное выражение, оно будет выражаться так: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
Изменить выше был мой оригинальный ответ и является правильным ответом на простой вопрос "синтаксическая ошибка". Более подробный ответ ниже...
Вы пытаетесь использовать $2 для представления "второй группы захвата", но на тот момент вы ничего не сделали, чтобы соответствовать вашему регулярному выражению. Даже если бы $2 было допустимым именем переменной PHP, оно все равно не было бы установлено в этот момент в вашем скрипте. Из-за этого вы можете определить, что вы используете preg_replace
ненадлежащим образом и что он может не соответствовать вашим реальным потребностям.
Обратите внимание, что preg_replace
документация не поддерживает использование $ n в качестве отдельной переменной вне операции замены. Другими словами, 'foo' . $1 . 'bar'
не является допустимой строкой замены, но 'foo$1bar'
является.
В зависимости от сложности get_site_url
, у вас есть 2 варианта:
Если
get_site_url
просто добавление корневого каталога или имени сервера, вы можете изменить строку замены наsrc="/myotherlocation$2"
, Это эффективно заменит "/image/..." на "/myotherlocation/image/..." в img src. Это не будет работать, еслиget_site_url
делает что-то более сложное.Если
get_site_url
сложно, вы должны использоватьpreg_replace_callback
за другие ответы. Прочтите документацию и отправьте новый вопрос (или, я полагаю, обновите этот вопрос?), Если у вас есть проблемы с реализацией.
$2
не является допустимой переменной PHP. Если вы имели в виду вторую группу в регулярном выражении, то вы хотите поставить \2
в строке. Однако, так как вы передаете его функции, вам необходимо использовать preg_replace_callback()
вместо этого и заменить соответствующим образом в обратном вызове.
Если переменная PHP начинается с числа, используйте следующее:
когда я получал следующее в качестве набора результатов от стороннего API
Код работает
$stockInfo->original->data[0]->close_yesterday
Код не выполнен
$stockInfo->original->data[0]->52_week_low
Решение
$stockInfo->original->data[0]->{'52_week_high'}