php preg_match - >在变量中保存匹配的值?

时间:2011-02-14 14:32:31

标签: php preg-match

我的$content变量存储了YouTube视频链接。

$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($video)我正在打印一个1,这意味着它已被找到。但是我需要在变量中保存找到的字符串。我怎么能这样做?

谢谢

2 个答案:

答案 0 :(得分:4)

您应该在$found[2]

中找到它

包含所有捕获的匹配,这是你在括号中得到的所有模式。

  • $ found [0] =整场比赛
  • $ found [1] =第一个表达式[TRACK =
  • $ found [2] =整个网址,您有多个子网 - 这些将形成以下捕获的匹配项:
  • $ found [3] = http或https
  • $ found [4] = separator://
  • $ found [5] = subdomain
  • $ found [5] = .youtube。
  • $ found [6] =顶级域名
  • $ found [7] = path
  • $ found [8] =关闭]

显然,您正在以相当浪费的方式使用括号,因为您正在捕获您无意使用的数据。您可以使用(?: )作为对模式进行分组而无需捕获的方法,例如(?:http|https)匹配http或https,但不会捕获它。

答案 1 :(得分:1)

使用preg_filter - 如果您想将它与多个链接一起使用(只会返回正确的内容)。

或使用preg_replace,从$content获取所需内容。