За последние 24 часа нас посетили 17687 программистов и 1961 робот. Сейчас ищут 1165 программистов ...

Удалить двойные тэги?

Тема в разделе "PHP для новичков", создана пользователем User123, 8 мар 2018.

Метки:
  1. User123

    User123 Активный пользователь

    С нами с:
    23 янв 2015
    Сообщения:
    47
    Симпатии:
    2
    Так получилось, что появились много записей такого вида

    Код (Text):
    1. <a href="/123"><a href="/456">dsfgdg</a></a>
    Как правильно удалить внутренний тэг, то есть удалить < a href="/456" > и < /a >
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Захотелось написать регулярку
    PHP:
    1. preg_match('/(<a href="[\d]+">)<a href="[\d]+">([\w]+)<\/a>(<\/a>)/', $str, $res);
    2. echo($res[1].$res[2].$res[3]);
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.810
    Симпатии:
    1.332
    Адрес:
    Лень
    нет, решить надо другим способом, откуда они берутся?
     
  4. User123

    User123 Активный пользователь

    С нами с:
    23 янв 2015
    Сообщения:
    47
    Симпатии:
    2
    причины возникновения устранены
    теперь нужно в базе привести в норму
    --- Добавлено ---
    не понял как это применить в цикле

    к str_replace можно применить это?
     
  5. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    PHP:
    1. foreach($rows as $row) {
    2.     preg_match('/(<a href="[\d]+">)<a href="[\d\s]+">([\w\s]+)<\/a>(<\/a>)/', $row->link, $res);
    3.     $row->link = $res[1].$res[2].$res[3];
    4. }
     
  6. User123

    User123 Активный пользователь

    С нами с:
    23 янв 2015
    Сообщения:
    47
    Симпатии:
    2
    не получается, не выводит echo результат

    Код (Text):
    1. $str = '<a href="/ghj"><a href="/4ghj5d6">sdfsf</a></a>';
    2. preg_match('/(<a href="[\d]+">)<a href="[\d\s]+">([\w\s]+)<\/a>(<\/a>)/', $str, $res);
    3. echo $res;
     
  7. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Ну так кто ж знал что у тебя в линках не только число) Измени [\d] на [\w_]
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.810
    Симпатии:
    1.332
    Адрес:
    Лень
    а в бд сразу UPDATE regex не ? :)
     
    nospiou нравится это.
  9. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Слишком круто)
     
  10. User123

    User123 Активный пользователь

    С нами с:
    23 янв 2015
    Сообщения:
    47
    Симпатии:
    2
    заменил
    выводит Array
    а как сделать вывод echo уже готового текста?
    то есть так
    Код (Text):
    1. <a href="/4ghj5d6">sdfsf</a>
     
  11. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    PHP:
    1. foreach($rows as $row) {
    2.     preg_match('/(<a href="[\w]+">)<a href="[\w]+">([\w\s]+)<\/a>(<\/a>)/', $row->link, $res);
    3.     $row->link = $res[1].$res[2].$res[3];
    4.     echo ($row->link)
    5. }
     
  12. User123

    User123 Активный пользователь

    С нами с:
    23 янв 2015
    Сообщения:
    47
    Симпатии:
    2
    не выводит :(

    а можно ли как нибудь в preg_replace это сделать?
     
  13. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Нет. $res массив с найденными совпадениями в переменной $row->link. Дальше ты их объединяешь и выводишь
    Если не ооп то замени на $row['link'] или что у тебя там. Плюс var_dump $res в помощь
     
  14. User123

    User123 Активный пользователь

    С нами с:
    23 янв 2015
    Сообщения:
    47
    Симпатии:
    2
    удаляет две href, но можно как нибудь в этом коде оставить один href?
    Код (Text):
    1. $text = preg_replace('/<a[^>]*><a[^>]*>(.*)<\/a><\/a>/Ui', '\\1', $str);
     
  15. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    () - значения которое ты хочешь записать в массив $res то что тебе нужно возьми в () а дальше объедини
     
  16. User123

    User123 Активный пользователь

    С нами с:
    23 янв 2015
    Сообщения:
    47
    Симпатии:
    2
    в общем с бубном поплесал как обычно :)

    вот это работает

    Код (Text):
    1. $str = '<a href="/sdfgdfgdfg"><a href="/4ghj5d6">sdfhsf</a></a>';
    2. $text = preg_replace('/<a[^>]*>(.*)<\/a><\/a>/Ui', '\\1</a>', $str);
     
  17. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Думал мы все еще о preg_match)) Нужно пойти развеяться.