Php preg match all存在小问题
下面的问题是什么?它没有回声Php preg match all存在小问题,php,regex,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
$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];
$string='';
预匹配('#]+>。+?http://www.youtube.com/v/([A-Za-z0-9\-#]+).+?#s',$string,$matches);
echo$匹配[1];
正因为如此:]+>。+?http
。这意味着:
匹配字符串
后跟一个
后跟任意数量的字符(非贪婪)
然后是http
您的字符串与这些条件不匹配,因为在http
之前没有
。如果删除[^>]+>
位,则正则表达式应该匹配
现在您知道了使用正则表达式解析HTML的一个问题。你不应该。您应该改用DOM解析器。因此:]+>。+?http
。这意味着:
匹配字符串
后跟一个
后跟任意数量的字符(非贪婪)
然后是http
您的字符串与这些条件不匹配,因为在http
之前没有
。如果删除[^>]+>
位,则正则表达式应该匹配
现在您知道了使用正则表达式解析HTML的一个问题。你不应该。您应该改用DOM解析器。实际上可以使用regexp解析html。例如,看一看smarty-s source,看看它是如何解析tags:P的,但这并不是解决问题的方法
尝试xmlparser或domdocument,实际上可以使用regexp解析html。例如,看一看smarty-s source,看看它是如何解析tags:P的,但这并不是解决问题的方法
preg_match('#([\w\-]+){11}?#is', $string, $matches);
尝试使用xmlparser或domdocument解决问题?您正在尝试使用regexps解析HTML!正如我在这里读到的,这是一个工作结果,答案是针对不同的场景。他们匹配的是废话,而不是
。问题出在哪里?您正在尝试使用regexps解析HTML!正如我在这里读到的,这是一个工作结果,答案是针对不同的场景。它们是匹配的废话
,而不是
。
preg_match('#([\w\-]+){11}?#is', $string, $matches);