2011-02-14 2 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] = 1番目の式[見つかっTRACK =
  • $あなたは内のサブグループの数を持っている[2] =全体のURL、 - これらの意志捕捉マッチ以下の形式:
  • $見出さ[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

+0

preg_replace( "/ foo(bar)/"、 "\ $ 1"、 "foo bar foo bar"); "bar bar"を返します。 – SergeS

関連する問題