ФорумПрограммированиеPHP для идиотов → Все вхождения подстроки обрамить теги с условием что это не содержимое html-тега

Все вхождения подстроки обрамить теги с условием что это не содержимое html-тега

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 24 июня 2010 г. 9:53

    Есть строка:
    first query and query <img src="?query=" /> and query


    Есть реглярка:
    /([^\<]*)(query)([^\>]*)/i


    Заменить на:
    \1<b>\2</b>\3


    PHP:
    preg_replace("/([^\<]*)(query)([^\>]*)/i", '\1<b>\2</b>\3', $text);


    Ожидаемый результат:
    first <b>query</b> and <b>query</b> <img src="?query=" /> and <b>query</b>


    Текущий результат:
    first query and <b>query</b> <img src="?query=" /> and <b>query</b>


    Помогите решить, голова болит… :/
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 24 июня 2010 г. 10:00, спустя 7 минут 13 секунд

    adw0rd, если я тебе скажу самый простой и смешной вариант, то ты обидешься :)
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 24 июня 2010 г. 10:01, спустя 1 минуту 28 секунд

    Говори)
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 24 июня 2010 г. 10:05, спустя 3 минуты 56 секунд

    да мне сыкотно :D


    $str = 'first query and query <img src="?query=" /> and query';

    preg_match_all('#<[^>]*>#', $str, $tags);
    $replace = array();
    foreach($tags[0] as $s)
    {
    $replace[$s] = '#'.uniqid().'#';
    }

    $str = str_replace(array_keys($replace), $replace, $str);

    ololo…. твое реплейсо … ololol

    $str = str_replace($replace, array_keys($replace), $str);


    ну идю ты понял
    Спустя 34 сек.
    зы: одной регуляркой да, голову пропьешь быстрее ;)
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 24 июня 2010 г. 10:11, спустя 5 минут 26 секунд

    Ага, понял, если ничего не придумаю, то так и сделаю
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 24 июня 2010 г. 10:11, спустя 42 секунды


    Ага, понял, если ничего не придумаю, то так и сделаю
    не трять вредя, тропа протоптаная ;)
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 24 июня 2010 г. 10:13, спустя 2 минуты 11 секунд

    Можно еще:
    * заменить все, включая в тегах,
    * после чего пройтись еще раз, найти в html-тегах "замену" и заменить на исходное
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 24 июня 2010 г. 10:17, спустя 3 минуты 4 секунды

    adw0rd, можно и так, просто 1ой регуляркой - проклятие :D
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!