2012-10-20 60 views
1

我想在這裏和谷歌搜索,但無法找到解決如下:的preg_match模式變量使用

$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); 

如上面所寫,該數組爲空。但是,如果我將preg_match函數中的$expression變量替換爲php註釋之後的文本(即:'#2485/(.*?)&w#'),我會得到期望的結果。

爲什麼使用$表達式變量不起作用?

回答

1

$expression是一個字符串開頭與結尾'。因此,'成爲分隔符,#成爲您的正則表達式中的文字。 '#2485/(.*?)&w#'是一個以#開頭和結尾的字符串,它現在是正則表達式的分隔符而不是文字。

只需使用任一本:

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

或(我推薦)這一點:

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

杜!非常感謝。我一直在盯着我的屏幕5天堅實:)。我會使用你的建議,因爲我只使用雙引號,因爲需要雙引號來轉義$ number變量。我一直在試圖找出這個問題的房子周圍,這一直很簡單!這就是cookie有時候會崩潰的,呃? – MrG

0

$expression刪除單引號:

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

爲什麼不:(。*?)?「#{$號}/&w#";你已經擁有雙引號和PHP擴展了它們中的變量爲什麼要並置?@m。buettner也是如此 – CodeAngry

+0

可能也是如此,但可能更好的辦法是隻使用單引號和連接,如m.buettner指出的那樣。不得不擴展字符串中的變量。 –

+0

不會擴展而是連接。沒有勝利。你有1擴展與2連接。 – CodeAngry