语法错误,意外T_LNUMBER,期待T_VARIABLE或'$'

Gir*_*iri 4 php regex syntax-error preg-replace

我越来越 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;
}
Run Code Online (Sandbox Code Playgroud)

这是我收到错误的行 $replace = 'src="'.get_site_url( $2 ).'"';

任何人都可以帮我修复它吗?谢谢

Far*_*ray 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,您有两种选择:

  1. 如果get_site_url只是添加根目录或服务器名称,则可以将替换字符串更改为src="/myotherlocation$2".这将有效地将"/ image/..."替换为img src中的"/ myotherlocation/image/...".如果get_site_url做一些更复杂的事情,这将无法奏效.

  2. 如果get_site_url是复杂的,你应该使用preg_replace_callback其他的答案.如果您在实施方面遇到问题,请将文档读取并发布新问题(或者我想更新此问题?).