Я хочу найти и выполнить некоторые операции над этой строкой:
<img src="images/video.png" border="0" alt="60" />
Я играю с регулярными выражениями, но, похоже, он еще не работает:
if (preg_match_all('<img src="images/video.png" border="0" alt="[^"]*">', $content, $regs)) { for($i=0;$i<count($regs[0]);$i++){ echo $regs[0][$i] . "<br>"; $id = preg_replace('alt="[^"]*"', "$1", $regs[0][$i]); echo "The id: " . $id . "<br>"; } }
Как насчет разбора DOM с помощью PHP Simple HTML DOM Parser
Вы можете скачать скрипт отсюда: http://sourceforge.net/projects/simplehtmldom/files/
Если вы загрузите этот скрипт в свой текущий скрипт следующим образом:
include_once("simple_html_dom.php");
А затем вы можете прокручивать все изображения в своем HTML и делать с ними то, что вы хотите:
$html = "Your HTML code"; foreach($html->find('img') as $element) { // Do something with the alt text $alt_text = $element->alt; // Replace the image $element->src = 'new_src'; $element->alt = 'new_alt'; }
Без использования библиотеки:
// Load the HTML $html = "Your HTML code"; $dom = new DOMDocument(); $dom->loadHTML($html); // Loop through all images $images = $dom->getElementsByTagName('img'); foreach ($images as $image) { // Do something with the alt $alt = $image->getAttribute('alt'); // Replace the image $image->setAttribute("src", "new_src"); $image->setAttribute("alt", "new_alt"); } // Get the new HTML string $html = $dom->saveHTML();
Вы должны использовать DOM для анализа XML / HTML …
Regex – это не рекомендуемый способ сделать это, так как malformed html, как известно, трудно повторить регулярное выражение. Вы хотите посмотреть в DOMDocument: http://php.net/manual/en/class.domdocument.php
Здесь обсуждаются другие варианты:
Надежный и зрелый HTML-парсер для PHP
php > $xml = new SimpleXmlElement('<img src="images/video.png" border="0" alt="60" />'); php > foreach($xml->xpath('//@alt') as $alt) echo "Id is: ",(string)$alt,"\n"; Id is: 60
[Расширение моего комментария в ответ]
Вот пример кода, который поможет вам начать работу с библиотекой DOM PHP:
$html = '...'; $doc = new DOMDocument(); $doc->loadHTML($html); $xpath = new DOMXPath($doc); // Build the XPath query (you can specify very complex criteria here) $images = $xpath->query('//img[@src="images/video.png" and @border="0"]'); foreach($images as $image) { echo 'This image has alt = '. $image->attributes->getNamedItem('alt')->nodeValue. '<br />'; }
Вы можете посмотреть учебник XPath, если хотите настроить запрос с более сложной логикой.
Вы должны использовать это регулярное выражение
<img src="images/video.png" border="0" alt="([^"]*)" />
Но если вы тоже хотите принять этот ввод
<img alt="60" src="images/video.png" border="0" />
и любую другую возможную перестановку, тогда лучше совместить тег изображения сам по себе, а затем сопоставить атрибут alt на его содержимом.