2011-02-14 54 views
4

嘿傢伙, my $ content變量存儲YouTube視頻鏈接。php preg_match - >在變量中保存匹配的值嗎?

$youtubeurl = "/(\[TRACK=)((http|https)(\:\/\/)(www|it|co\.uk|ie|br|pl|jp|fr|es|nl|de)(\.youtube\.)(com|it|co\.uk|ie|br|pl|jp|fr|es|nl|de)([a-zA-Z0-9\-\.\/\?_=&;]*))(\])/si"; 


$video = preg_match($youtubeurl, $content , $found); 
print_r($video]); // 1 

如何將匹配的字符串的值存儲在變量中?現在,如果我print_r($視頻),我剛剛打印1意味着它被發現。不過,我需要在變量中保存找到的字符串。我怎樣才能做到這一點?

謝謝

回答

4

你應該找到它在$found[2]

它包含所有捕獲的匹配,這是您在括號中的所有模式。

  • $實測值[0] =整個匹配
  • $實測值[1] =第一表達[TRACK =
  • $實測值[2] =完整的網址,你有許多子組的 - 這些將形成以下捕獲的匹配:
  • $實測值[3] = http或https
  • $發現[4] =分離器://
  • $發現[5] =子域
  • $發現[5 ] = .youtube。
  • $發現[6] =頂級域
  • $發現[7] =
  • 路徑
  • $發現[8] =閉合]

顯然,您使用括號在一個相當浪費方式,因爲你正在捕捉你無意使用的數據。您可以使用(?:)作爲分組模式而不捕獲的方式,例如(?:http|https)與http或https匹配,但不會捕獲它。

1

使用http://www.php.net/manual/en/function.preg-filter.php - 如果你想通過多條鏈路使用它(只返回正確的)

,或者使用了preg_replace,帶你從$內容需要什麼

+0

我如何使用preg_replace爲了將找到的字符串存儲在變量中?我不需要替換任何東西。我只想看看文本是否匹配我的模式,如果是這樣,將這個匹配的字符串存儲在變量中! – matt 2011-02-14 14:40:41