preg_replace удаляют только часть строки, но оставляют остальных использующих PHP

Я пытаюсь сделать замену в строке в PHP. Как Вы удаляете часть, которая находится только в группе в PHP?

<font.+?(size.+?.)>

Я хочу удалить size=x где когда-либо это в. Проблема, я не могу добраться

 $text = preg_replace("<font.+?(size.+?.)>","",$text);

функционируйте для работы.

Источник в качестве примера этого

<font style="background-color: rgb(255, 255, 0);" size="2"><strong><u>text</u></strong></font>
<font size="2">more text</font>

в это

<font style="background-color: rgb(255, 255, 0);" ><strong><u>text</u></strong></font>
<font>more text</font>

Я пытаюсь сказать. Где когда-либо существует тег шрифта и если я вижу размер - что-либо удаляет атрибут размера, но оставляет все остальное неповрежденным.

0
задан hakre 29 October 2012 в 12:47
поделиться

3 ответа

Не лучшее решение, но для ответа на ваш вопрос:

$html = <<<END
<font style="background-color: rgb(255, 255, 0);" size="2"><strong><u>text</u></strong></font>
<font size="2">more text</font>
END;

$text = preg_replace('/(<font.*?)(size\s*=[^\s>]*)([^>]*)>/si', '\1\3>', $html);
var_dump($text);
1
ответ дан 4 September 2019 в 00:46
поделиться

Регулярное выражение - плохой способ выполнения манипуляций с HTML, но, тем не менее, общий метод для выполнения такого рода сопоставления регулярных выражений и частичной замены заключается в сопоставлении:

(<font.+?)(size.+?.)(>)
\________/\________/\_/
    1         2      3

А затем заменить на

$1$3

Это заменяет обратные ссылки на замену с чем совпали группа 1 и группа 3, исключая группу 2, фактически удаляя то, что соответствовало группе 2.

Ссылки

1
ответ дан 4 September 2019 в 00:46
поделиться
$dom = new DOMDocument();
$dom->loadHTML($htmlstring);
$x = new DOMXPath($dom);
$list = $x->query('//font/@size');
for($i = $list->length-1;$i>=0;$i--){
    $attr = $list->item($i);
    $attr->ownerElement->removeAttributeNode($attr);
}
4
ответ дан 4 September 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: