Суть в чем, есть текст с html тегами в базе данных. Мне нужно провести замену кусков теста и разных слов непосредственно в самом тексте, не цепляя теги h1-h6, мета-теги, альты и тайтлы картинок. Т.е. алгоритм я вижу так: 1. Беру текст из БД 2. Чищу от тегов 3. Провожу замену того что мне нужно 4. Возвращаю все теги на место 5. Записываю полученный результат обратно в БД. Собственно сам вопрос: как грамотно организовать пункты 2 и 4 при условии что текстов несколько тысяч?
Мне нужно заправить машину, я вижу это так: 1. Приезжаю на заправку 2. Скручиваю с машины колеса 3. Заправляю. 4. Возвращаю колеса назад. Собственно сам вопрос: нахрена?
Я вроде доступным языком написал "Мне нужно провести замену кусков теста и разных слов непосредственно в самом тексте, не цепляя теги h1-h6, мета-теги, альты и тайтлы картинок." Если непонятно, объясню еще детальнее: допустим мне нужно заменить слово "машина" на слово "велосипед" но при этом не производя такую замену в тегах h1-h6, мета-тегах, альтах и тайтлах картинок. Делая по принципу: PHP: str_replace($key, $newkey, $content); Я заменю слово "машина" на "велосипед" даже если оно встречается в тегах. Если делать по принципу: PHP: preg_replace($pattern, $newkey, $content); То какое нужно тогда соорудить регулярное выражение? У меня мыслей нет.. Возможно есть другие варианты без регулярки? Собственно сабж.. Я надеюсь доходчиво объяснил зачем "скручивать колеса перед заправкой"?
Нет, мне нужно массово проставить анкорные ссылки вида <a href="#">кусок текста</a>. Но мне не нужно чтоб ссылка была из тегов и мета-тегов...
http://phpclub.ru/detail/article/regexp_2 - вот эта статья должна помочь. Она про то, как делать проверку регулярками на то, что идёт до и после искомого. Другого выхода я не вижу.
а можно пример? я курил манул по dom в php, но что-то не въехал как он мне поможет(( Спасибо за ссылку, буду пробовать...
К примеру, выбирать только определённые теги/набор тегов для замены. Ещё (я так не делал, но где-то читал) можно использовать XPath и при работе с HTML, а не XML, тогда вообще всё становится проще, если правильно XPath-запрос составить. Всё зависит от того, насколько сложная структура внутри у вас. Хотя я, к примеру, ни разу не помещал в базу html-страницу целиком, с метатегами и прочей лабудой.
Я к сожалению пока не знаком с XPath, но чуствую время пришло!) Та я тоже не помещал, но wordpress собака это делает((
Есть и другой подход. Код (Text): word|<[^>]*>(*SKIP)(*F) https://regex101.com/r/7ngZkY/1 Как-то так https://regex101.com/r/7ngZkY/2
Все гораздо проще. Навигация по DOM через DomDocument во многом аналогична таковой на клиентской стороне. Еще один любитель ковырять регулярками формализованные, стандартизированные структуры данных, для работы с которыми есть нативные модули... Хлебом вас не корми, дай регулярками поковырять XML, HTML и, порой, даже видал, как регулярками JSON народ разбирает...
Огромное спасибо, то что нужно... Я честно так и не въехал как мне это должно помочь. Получил я чистый текст без тегов, а дальше что? Как провести в этом тексте замену и вернуть его первоначальное состояние?
А ты потрать болье двух минут, почитай документацию. А то иначе ты так никогда ни во что не въедешь, и будет у тебя все на костыльных сниппетах из интернета держаться.