2

我必须使用匹配 php 文件中的 php 变量preg_match()

$GLOBALS['app_list_strings']['enjay_host_list'] = array (

我怎样才能做到这一点。

我在做,

<?php
$filename='/var/www/su/custom/include/language/en_us.lang.php';
$fileopen=file($filename);
        //echo $fileopen[2];
$NoOflines = count($fileopen);
echo $NoOflines ."<br>";
$Changed=0;
$Foundon=0;
$FoundFirstClose=0;
        for($i=0;$i<$NoOflines;$i++)
        {
                echo $fileopen[$i]."<br>";
                 if(preg_match("/\$GLOBALS['app_list_strings']['enjay_host_list']=array ( /i", $fileopen[$i]))
                 {
                    $Foundon=$i;
                    echo $fileopen[$i]."<br>";
                 }

        }
?>
4

3 回答 3

1

您需要转义正则表达式中具有特殊含义的每个字符,这不仅$意味着[,](. 有关pcre 正则表达式中特殊字符的列表,请参阅 PCRE 文档。

另一个问题是,因为你使用双引号,php 会尝试$GLOBALS..用变量内容替换,除非你在它上面加双反斜杠,所以最好只使用Nowdoc语法(如果你使用 php >= 5.3,你真的应该)。

$pattern = <<<'EOS'
/\$GLOBALS\['app_list_strings'\]\['enjay_host_list'\]=array \( /i
EOS;

for($i=0;$i<$NoOflines;$i++)
{
    echo $fileopen[$i]."<br>";
    if(preg_match($pattern, $fileopen[$i]))
    {
        $Foundon=$i;
        echo $fileopen[$i]."<br>";
    }    
}
于 2013-06-29T09:13:48.597 回答
0

您在正则表达式中缺少一些转义字符。

"/\$GLOBALS\['app_list_strings'\]\['enjay_host_list'\]=array\s\(/i"
于 2013-06-29T09:07:22.583 回答
0
$string = "\$GLOBALS['app_list_strings']['enjay_host_list']=array (" ;
$match = preg_match("/\\\$GLOBALS\['app\_list\_strings'\]\['enjay\_host\_list'\]\s*=\s*array\s*\(/i", $string);

var_dump($match) ;

您的正则表达式可能存在的问题:

  1. 您必须将特殊字符转义为 ([]_$)
  2. 在 PHP 中使用双引号时必须使用双转义$符号
  3. 空格也很重要。我使用\s*which 对应于 0 个或多个空格。
于 2013-06-29T09:07:40.283 回答