2014-03-31 33 views
1

所以我有這樣的代碼:與 S在它PHP正則表達式是不工作

$body = '$var = \'VALUE\';'; 
$matches = array(); 
preg_match("/\$var\s*=\s*('|\")(.*)('|\");/", $body, $matches); 
print_r($matches); 

但是,它揭示了$匹配的是空的...

爲什麼是這樣呢?當我嘗試http://regex101.com/正則表達式的工作。是因爲我在正則表達式中使用了嗎? (我試圖匹配使用它的空白字符)

+2

FYI在PHP中,你應該使用單引號您正則表達式的字符串 - 他們不試圖解釋轉義字符。 ''\ n''將成爲'\ n',但'「\ n」'將成爲換行符。 – Robin

+0

當您使用普通引號時將其轉義。例如:'「\\ s」'或更改引號:''\ s'' –

回答

2

"\$"是一個字符串,其中包含文字$。在正則表達式中,字面$的含義是「字符串結尾」(或帶有適當修飾符的「行尾」)。

您需要使用\\\$,或者在字符串周圍使用單引號而不是雙引號。

另一種選擇是NOWDOC:

preg_match(<<<'REGEX' 
/\$var\s*=\s*(['"])(.*)\1;/ 
REGEX 
, $body, $matches); 

它看起來更好用語法高亮,我答應!

highlight

+0

...這就是爲什麼我們在RegExp模式中使用單引號;跟蹤一個gazillion反斜槓是沒有人的樂趣的想法。 – CD001

+0

@ CD001看到我的編輯另一個選項;) –

+0

嘿 - 是的,NOWDOC的堅實,但我覺得很難閱讀...我開始認爲我正在寫STDIN在C :) – CD001