Замените изображения регулярными выражениями

Я хочу найти и выполнить некоторые операции над этой строкой:

<img src="images/video.png" border="0" alt="60" /> 
  1. Найти каждое происхождение в контексте
  2. Извлеките атрибут alt (в этом случае 60) и работайте с этим номером
  3. Заменить все изображение

Я играю с регулярными выражениями, но, похоже, он еще не работает:

  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>"; } } 

Solutions Collecting From Web of "Замените изображения регулярными выражениями"

Как насчет разбора 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 на его содержимом.