Так получилось, что появились много записей такого вида Код (Text): <a href="/123"><a href="/456">dsfgdg</a></a> Как правильно удалить внутренний тэг, то есть удалить < a href="/456" > и < /a >
Захотелось написать регулярку PHP: preg_match('/(<a href="[\d]+">)<a href="[\d]+">([\w]+)<\/a>(<\/a>)/', $str, $res); echo($res[1].$res[2].$res[3]);
причины возникновения устранены теперь нужно в базе привести в норму --- Добавлено --- не понял как это применить в цикле к str_replace можно применить это?
PHP: foreach($rows as $row) { preg_match('/(<a href="[\d]+">)<a href="[\d\s]+">([\w\s]+)<\/a>(<\/a>)/', $row->link, $res); $row->link = $res[1].$res[2].$res[3]; }
не получается, не выводит echo результат Код (Text): $str = '<a href="/ghj"><a href="/4ghj5d6">sdfsf</a></a>'; preg_match('/(<a href="[\d]+">)<a href="[\d\s]+">([\w\s]+)<\/a>(<\/a>)/', $str, $res); echo $res;
заменил выводит Array а как сделать вывод echo уже готового текста? то есть так Код (Text): <a href="/4ghj5d6">sdfsf</a>
PHP: foreach($rows as $row) { preg_match('/(<a href="[\w]+">)<a href="[\w]+">([\w\s]+)<\/a>(<\/a>)/', $row->link, $res); $row->link = $res[1].$res[2].$res[3]; echo ($row->link) }
Нет. $res массив с найденными совпадениями в переменной $row->link. Дальше ты их объединяешь и выводишь Если не ооп то замени на $row['link'] или что у тебя там. Плюс var_dump $res в помощь
удаляет две href, но можно как нибудь в этом коде оставить один href? Код (Text): $text = preg_replace('/<a[^>]*><a[^>]*>(.*)<\/a><\/a>/Ui', '\\1', $str);
() - значения которое ты хочешь записать в массив $res то что тебе нужно возьми в () а дальше объедини
в общем с бубном поплесал как обычно вот это работает Код (Text): $str = '<a href="/sdfgdfgdfg"><a href="/4ghj5d6">sdfhsf</a></a>'; $text = preg_replace('/<a[^>]*>(.*)<\/a><\/a>/Ui', '\\1</a>', $str);