我正在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 ).'"';
任何人都可以帮我解决吗? 感谢
答案 0 :(得分:8)
你不能拥有' $ 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
的复杂程度,您有两种选择:
如果get_site_url
只是添加根目录或服务器名称,则可以将替换字符串更改为src="/myotherlocation$2"
。这将有效地取代" / image /..."用" / myotherlocation / image /..."在img src中。如果get_site_url
正在做更复杂的事情,这将无效。
如果get_site_url
很复杂,您应该按preg_replace_callback
使用other answers。如果您在实施方面遇到问题,请将文档读取并发布新问题(或者我想更新此问题?)。
答案 1 :(得分:3)
PHP变量名称不能以数字开头。
答案 2 :(得分:3)
$2
不是有效的PHP变量。如果你指的是正则表达式中的第二个组,那么你想把\2
放在一个字符串中。但是,由于您将其传递给函数,因此您需要使用preg_replace_callback()
代替并在回调中进行适当替换。
答案 3 :(得分:3)
您要尝试做的事情(即用函数调用的结果替换匹配的字符串)无法使用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"
答案 4 :(得分:0)