2010-10-04 65 views
2

我仍然在學習PHP正則表達式,因此我希望有人能夠幫助我完成我正在嘗試完成的任務。PHP查找字符串並關注未知字符

$string = 'Writing to tell you that var MyCode = "dentline"; Learn it.'; 

我希望做的是符合其內容

var MyCode =" 

後,我相匹配的部分,我想檢索動態生成字符後面的其餘字符串的一部分串。在這個例子中,[dentline]是8個字符,但並非總是如此。因此,我想直到我達到

"; 

我已經有效地收集後,該字符串的一部分,我想要去除字符串一路匹配,因此其餘的信息是雙引號之間是什麼樣的

dentline 

任何幫助非常感謝!

+0

請問你的字符串總是被雙引號,而不是單引號?你的字符串是否包含轉義引號?代碼中的空格是否有意義?變量名稱始終是「MyCode」還是可以是其他名稱? – 2010-10-04 22:47:16

+0

字符串總是用雙引號。沒有轉義字符,沒有空格,沒有變量名稱。就像一樣。 – 2010-10-04 23:48:08

回答

7

試試這個:

$string = 'Writing to tell you that var MyCode = "dentline"; Learn it.'; 
$matches = array(); 
preg_match('/var MyCode = "(.*?)";/', $string, $matches); 
echo $matches[1]; 

結果:

dentline 

ideone

說明

 
var MyCode = " Match this string literally and exactly 
(    Start a capturing group. 
.*?    Match any characters, as few as possible (not greedy) 
)     End the capturing group. 
";    Match the closing double quote followed by a semi-colon 

的捕獲組「捕獲」匹配的內容並將其存儲在數組$matches中,以便之後可以訪問它。

關於這些構造的更多信息可以在這裏找到:

變化

如果 「mycode的」 可以改變,然後用這個來代替:

preg_match('/var \w+ = "(.*?)";/', $string, $matches); 

在這個表達式中\w表示「匹配任何字符」。您可能還想使用\s+而不是空格,以便您可以匹配一個或多個任何空格字符(也是製表符和換行符)。同樣,\s*匹配零個或多個空格。所以你嘗試的另一種可能性是:

preg_match('/var\s+\w+\s*=\s*"(.*?)"\s*;/', $string, $matches); 
+0

令人驚歎,謝謝!你能否提供更多關於如何和爲什麼會起作用的信息? – 2010-10-04 22:47:32

+0

@Dave吻:我的更新答案有幫助嗎? – 2010-10-04 22:53:53

+0

我不能要求更多,真的,一個偉大的資源。謝謝! – 2010-10-04 23:46:26