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

时间:2012-03-05 18:02:19

标签: php regex preg-replace syntax-error

我正在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 个答案:

答案 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的复杂程度,您有两种选择:

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

  2. 如果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)

如果PHP变量以数字开头,请使用以下内容:

当我从第三方API获取以下结果作为结果集

enter image description here

代码作品

$stockInfo->original->data[0]->close_yesterday

代码失败

$stockInfo->original->data[0]->52_week_low

解决方案

$stockInfo->original->data[0]->{'52_week_high'}