preg的小问题全部匹配

时间:2011-03-31 21:35:33

标签: php regex

以下是什么问题?它没有回应什么......

$string = '<embed src="http://www.youtube.com/v/XBH1dcHoL6Y&rel=0&hl=en_US&feature=player_embedded&­version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="390"></embed>'; 

preg_match('#<embed[^>]+>.+?http://www.youtube.com/v/([A-Za-z0-9\-_]+).+?</embed>#s', $string, $matches); 
echo $matches[1];

3 个答案:

答案 0 :(得分:2)

因此:<embed[^>]+>.+?http。这意味着:

  1. 匹配字符串<embed
  2. 后跟一个或多个非>
  3. 的字符
  4. 后跟>
  5. 后跟任意数量的字符(非贪婪)
  6. 后跟http
  7. 您的字符串与这些条件不符,因为您的>之前没有http。如果删除正则表达式应匹配的[^>]+>位。

    现在您知道使用正则表达式解析HTML时遇到的一个问题。你不应该。您应该使用DOM解析器。

答案 1 :(得分:1)

实际上可以使用regexps解析html。看一下例如smarty-s来看看它如何解析标签:P但它不是这样做的方式。

尝试xmlparser或domdocument

答案 2 :(得分:0)

preg_match('#([\w\-]+){11}?#is', $string, $matches);