Я пытаюсь извлечь несколько URL-адресов из файла HTML с помощью регулярного выражения. В файле есть другие URL-адреса, у меня есть единственный шаблон, который у меня есть «tableentries». а также ""
Пример кода HTML:
<tr class="tableentries2"> <td> <a href="http://example.com/all-files/files/00000000789/">Click Here</a> </td>
PHP Я написал:
$html = "value of the code above" if(preg_match_all('/<td>.*</td>/', $html, $match)){ foreach($match[0] as $x){ echo $x . "<br>"; }}
Почему бы просто не искать значения href
? (Обновлено, потому что отредактированный код теперь имеет кавычки.)
preg_match_all('/href="([^\s"]+)/', $html, $match);
Тогда URI будет в $match[1][0]
.
Вы действительно не должны использовать регулярное выражение для анализа HTML. DOMDocument на самом деле очень прост в использовании для этого типа вещей. вот простой пример.
<?php error_reporting(E_ALL); $html = " <table> <tr> <td> <a href='http://www.test1-1.com'>test1-1</a> </td> <td> <a href='http://www.test1-2.com'>test1-2</a> </td> <td> <a href='http://www.test1-3.com'>test1-3</a> </td> </tr> <tr> <td> <a href='http://www.test2-1.com'>test2-1</a> </td> <td> <a href='http://www.test2-2.com'>test2-2</a> </td> <td> <a href='http://www.test2-3.com'>test2-3</a> </td> </tr> </table>"; $DOM = new DOMDocument(); //load the html string into the DOMDocument $DOM->loadHTML($html); //get a list of all <A> tags $a = $DOM->getElementsByTagName('a'); //loop through all <A> tags foreach($a as $link){ //echo out the href attribute of the <A> tag. echo $link->getAttribute('href').'<br />'; } ?>
Это приведет к выводу:
http://www.test1-1.com http://www.test1-2.com http://www.test1-3.com http://www.test2-1.com http://www.test2-2.com http://www.test2-3.com
<?php preg_match_All("#<a\s[^>]*href\s*=\s*[\'\"]??\s*?(?'path'[^\'\"\s]+?)[\'\"\s]{1}[^>]*>(?'name'[^>]*)<#simU", $html, $hrefs, PREG_SET_ORDER); foreach ($hrefs AS $urls){ print $urls['path']."<br>"; } ?>