PHP прег матч / заменить? - PullRequest
1 голос
/ 04 марта 2011

Мне нужно прочитать строку $ mysting и заменить все инциденты с e.x.

<img src="dummypic.jpg alt="dummy pic">

с

<img src="dummypic.jpg alt="dummy pic" title="dummy pic">

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

В некоторых случаях у меня есть дополнительные параметры, такие как border, with, height - и их следует оставить нетронутыми ...

Ответы [ 5 ]

2 голосов
/ 04 марта 2011

Вместо регулярных выражений загляните в PHP DOMDocument , чтобы изменить атрибуты, особенно если возникнут какие-либо сложности.

2 голосов
/ 04 марта 2011

Вы можете использовать phpQuery или QueryPath , чтобы сделать это:

$qp = qp($html);
foreach ($qp->find("img") as $img) {
    $img->attr("title", $img->attr("alt"));
}
print $qp->writeHTML();

Хотя в этом простом случае вполне возможно прибегнуть к регулярному выражению:

preg_replace('#(<img\s[^>]*)(\balt=)("[^"]+")#', '$1$2$3 title=$3', $h);

(было бы более разумно использовать preg_replace_callback, чтобы убедиться, что атрибут title = еще не присутствует.)

0 голосов
/ 04 марта 2011

Я обычно пишу быстрые грязные хаки в таких ситуациях (обычно работаю со структурированными данными, которые могут иметь несоответствия, такие как шаблонные теги движка, условные выражения и т. Д.). ИМО, это ужасное решение, но я могу быстро поразить эти сценарии.

Например.

<?
$html = '
<img src="dummypic.jpg" alt="dummy pic">
<img src="dummypic2.jpg" alt="dummy pic 2">

blahaahhh

<img src="dummypic.jpg" alt="dummy pic">
<img src="dummypic2.jpg" alt="dummy pic 2">
';

$tags = explode('<img', $html);

for ($i = 1; $i < count($tags); $i++)
{
    $src = explode('src="', $tags[$i]);
    $src = explode('"', $src[1]);
    $src = str_replace('.jpg', '', $src[0]);   

    $tags[$i] = '<img title="' . $src . '"' . $tags[$i];
}

echo implode('', $tags);
0 голосов
/ 04 марта 2011
0 голосов
/ 04 марта 2011

Вы действительно хотите сделать это, используя синтаксический анализатор html вместо регулярных выражений. Регулярные выражения не подходят для обработки html.

...