Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg match all存在小问题_Php_Regex - Fatal编程技术网

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);