Я пытаюсь сделать замену в строке в 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>
Я пытаюсь сказать. Где когда-либо существует тег шрифта и если я вижу размер - что-либо удаляет атрибут размера, но оставляет все остальное неповрежденным.
Не лучшее решение, но для ответа на ваш вопрос:
$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);
Регулярное выражение - плохой способ выполнения манипуляций с HTML, но, тем не менее, общий метод для выполнения такого рода сопоставления регулярных выражений и частичной замены заключается в сопоставлении:
(<font.+?)(size.+?.)(>)
\________/\________/\_/
1 2 3
А затем заменить на
$1$3
Это заменяет обратные ссылки на замену с чем совпали группа 1 и группа 3, исключая группу 2, фактически удаляя то, что соответствовало группе 2.
$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);
}