Заменить изображения регулярными выражениями - PullRequest
0 голосов
/ 19 июля 2011

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

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

    }
}

Ответы [ 6 ]

2 голосов
/ 19 июля 2011

Как насчет синтаксического анализа 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();
1 голос
/ 19 июля 2011

Регулярное выражение не является рекомендуемым способом сделать это, так как общеизвестно, что неправильно сформированный html трудно точно откорректировать.Вы хотите заглянуть в DOMDocument: http://php.net/manual/en/class.domdocument.php

Здесь обсуждаются другие альтернативы:

Надежный и зрелый анализатор HTML для PHP

1 голос
/ 19 июля 2011

Вы должны использовать DOM для разбора XML / HTML ...

0 голосов
/ 19 июля 2011

Вы должны использовать это регулярное выражение

<img src="images/video.png" border="0" alt="([^"]*)" />

Но если вы хотите допустить этот ввод тоже

<img alt="60" src="images/video.png" border="0" />

и любые другие возможные перестановки, то лучше сопоставить тег изображения насвой собственный, а затем сопоставьте атрибут alt с его содержимым.

0 голосов
/ 19 июля 2011

[Расширяя мой комментарий в ответ]

Вот пример кода, который поможет вам начать работу с библиотекой PHP DOM:

$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 , если хотите настроить запрос с более продвинутой логикой.

0 голосов
/ 19 июля 2011
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...