- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Добрый вечер, подскажите пожалуйста
есть задача, нужно найти некоторые теги и заменить их, но у них может быть сложная структура
например
В общем масса вариантов, вложенности однотипных, но в тоже время разных тегов, и нельзя путать, когда найденный тег закрывается.
В первом приближении я нашел решение, но есть загвоздка, мне нужно проверять чтобы внутри тега, не было такого же тега. Но я не могу придумать как.
preg_replace("/<tag 1>([^(<tag)]*)<\/tag>/i",'<b>\\1</b>', $str);Но это конечно не работает, потому, что конструкция c [] думает, что там сиволы а не слово полностью, как мне пропустить внутри тега все другие теги, кроме конкретного?
Спасибо.
Что есть в оригинале и что нужно получить, лучше так напишите.
Что есть в оригинале и что нужно получить, лучше так напишите.
Исходный код
Надо
В идеале конечно надо просто все теги <b param=1></b> заменить на новый тег, но при этом не трогать <b param=2>
В идеале конечно надо просто все теги <b param=1></b> заменить на новый тег, но при этом не трогать <b param=2>
дыг может быть просто str_replace?
дыг может быть просто str_replace?
Разве он не просто строку заменяет, яж не знаю, что может быть между <b param1>...</b>
главное не пропустить похожий тег внутри, чтоб не получилось <newtag>...</b>...<b param=1>...</newtag>, но надо, чтоб проходили другие теги, т.е. /'<b param1>(.*)</b>'/ пропустит все, /'<b param1>([^<]*)</b>'/ непропустит другие теги, а как сделать, чтото типа
/'<b param1>([^(<b)]*)</b>'/ , только, чтоб <b считалось одним словом, а не набором символов < и b
LEOnidUKG, а как заменишь <b param=1></b> на новый тег например span, не задев <b param=2></b>, при том что это могут быть вложенные теги?
Автору советую юзать DOM. Для парсинга html регулярные выражения не самый удачный вариант, тем более на произвольном документе.
LEOnidUKG, а как заменишь <b param=1></b> на новый тег например span, не задев <b param=2></b>, при том что это могут быть вложенные теги?
Я вообще не врубаюсь в задачу :)
Кстати, какой DOM, если там и вложенность произвольная?
Я бы надеялся, что там как-то построчно можно сделать. А вообще меня примеры ТС пугают и в них нифига не понятно.
А почему для DOM-а вложенность должна быть проблемой? getElement, xpath.. Правда как заменить сам тег я тоже пока еще не знаю. :)
ТС, попробуйте
LEOnidUKG, а как заменишь <b param=1></b> на новый тег например span, не задев <b param=2></b>, при том что это могут быть вложенные теги?
Автору советую юзать DOM. Для парсинга html регулярные выражения не самый удачный вариант, тем более на произвольном документе.
-----------------------------
О, это оказалось, то что нужно, спасибо огромное, если вам не трудно поясните пожалуйста, а то в мануалах, как то размыто описано.
(?!<b>) - это получается маска отрицания слова <b>, а ?: наличие маски отрицания и любой символ, я правильно понял? Плохо сформулировал, конечно.
В любом случае, еще раз спасибо, а то я зациклился на [^ ], которое и так понятно тут не уместно, а все правила еще не выучил, редко сталкиваюсь.
param=1
Если бы это был правильный xml, то не трудно было бы написать xslt.