preg_match模式变量用法

时间:2012-10-20 12:53:09

标签: php regex variables

我尝试在这里和谷歌搜索,但无法找到以下解决方案:

$picUrl = '"thumbs/phpThumb.php?src=../property-photos/50/2485/068cf6589a9fb13065818efef3d1e1c0-small.jpg&w=80&h=60&far=1&bg=EEEEEE"';
$number = "2485";
$expression = "'#".$number."/(.*?)&w#'";
echo "<b>expression is </b>".$expression."<br />";
echo "<b>picUrl is </b>".$picUrl."<br />";
preg_match($expression, $picUrl, $pic);  //'#2485/(.*?)&w#'
//if($pic) echo "pic is ".$pic[1]."<br />";
echo "<b>contents of pic array</b>".var_dump($pic);

如上所述,数组为空。但是,如果我替换$expression函数中的preg_match变量,并使用php注释后面的文本(即:'#2485/(.*?)&w#'),我会得到所需的结果。

为什么使用$ expression变量不起作用?

2 个答案:

答案 0 :(得分:1)

$expression是以'开头并以'结尾的字符串。因此,#成为分隔符,'#2485/(.*?)&w#'成为正则表达式中的文字。 #是一个以$expression = "#".$number."/(.*?)&w#"; 开头和结尾的字符串,现在是正则表达式的分隔符,而不是文字。

只需使用:

$expression = '#'.$number.'/(.*?)&w#';

或(我推荐)这个:

{{1}}

答案 1 :(得分:0)

$expression中删除单引号:

$expression = "#".$number."/(.*?)&w#";