- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева

В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Всем привет.
Помогите, пожалуйста, решить задачку.
Пример:
<p><a href="text">text</a> text</p>
нужно заменить текст: text на newtext, но при этом чтобы все что внутри тега <a> не подавлось замене. То есть на выходе должно получиться так:
<p><a href="text">text</a> newtext</p>
Нужна регулярка по которой можно было производить данную замену по всему тексту.
При этом вместо тегов <p> могут быть любые другие теги, <div>, <td> и так далее. Суть в том, чтобы исключить замену в теге <a> и в его атрибутах.
Спасибо)
Вот регулярка
'~text</a> text~'
а вот текст для замены
'text</a> newtext'
Вот регулярка
'~text</a> text~'
а вот текст для замены
'text</a> newtext'
Это не по подходит, а если текст, который нужно заменить находится не сразу после закрывающего тега <a> ? Я привел лишь пример, суть в том, что нужно заменить все патерны за исключенем тех что находятся внутри тега <A>.
Если будет исходный текст такой:
<p><a href="text">text</a> БЛА БЛА БЛА text</p>
То ваша вариант решения уже не поможет.
Можно сделать и расширенный вариант (это пример для PHP):
$t='<p><a href="text1">text1</a> text</p> <p><a href="text">text</a> bla bla 1 text bla bla 2</p>';
$t1= preg_replace('~(text)</a>(.*)\\1(.*)<~','\\1</a>\\2newtext\\3<',$t);
print htmlspecialchars($t).'<br/>';
print htmlspecialchars($t1);
Результат будет такой:
<p><a href="text1">text1</a> text</p> <p><a href="text">text</a> bla bla 1 text bla bla 2</p>
<p><a href="text1">text1</a> text</p> <p><a href="text">text</a> bla bla 1 newtext bla bla 2</p>
P.S.
В этом варианте необходимо еще добавить в регулярное выражение модификатор, делающий выражение "нежадным" (чтоб не захватывалось лишнего)
$t1= preg_replace('~(text)</a>(.*)\\1(.*)<~U','\\1</a>\\2newtext\\3<',$t);
Можно сделать и расширенный вариант (это пример для PHP):
$t='<p><a href="text1">text1</a> text</p> <p><a href="text">text</a> bla bla 1 text bla bla 2</p>';
$t1= preg_replace('~(text)</a>(.*)\\1(.*)<~','\\1</a>\\2newtext\\3<',$t);
print htmlspecialchars($t).'<br/>';
print htmlspecialchars($t1);
Результат будет такой:
<p><a href="text1">text1</a> text</p> <p><a href="text">text</a> bla bla 1 text bla bla 2</p>
<p><a href="text1">text1</a> text</p> <p><a href="text">text</a> bla bla 1 newtext bla bla 2</p>
P.S.
В этом варианте необходимо еще добавить в регулярное выражение модификатор, делающий выражение "нежадным" (чтоб не захватывалось лишнего)
$t1= preg_replace('~(text)</a>(.*)\\1(.*)<~U','\\1</a>\\2newtext\\3<',$t);
А что означает в вашм вариенте 1, 2 и 3? Это как некие идентификаторы идут? Ведь в реальном тексте их не будет, а нужна реализация для любых материалов.
Конструктор регулярных выражений
По нормальному это делается немного по другому, заменяются все анкоры на некие идентификаторы, а сами помещаются в массив. Заменяется текст в строке. Обратно востанвливаются ан коры из массива (или ссылки целиком). Одним регулярным выражением не знаю если сможете обойтись.
По нормальному это делается немного по другому, заменяются все анкоры на некие идентификаторы, а сами помещаются в массив. Заменяется текст в строке. Обратно востанвливаются ан коры из массива (или ссылки целиком). Одним регулярным выражением не знаю если сможете обойтись.
Да, была такая идея. Но при таком варианте мы потеряем регистры. Либо нужно заводить разные идентификаторы для каждого варианта написания одного слова.
Маэстро,
Кодируем все теги <a> в base64, затем производим замену, затем декодируем <a> обратно
Но при таком варианте мы потеряем регистры.
Ничего при таком варианте не теряется, регистр остается такой как есть. Либо таким вариантом с басе64 как посоветовали выше
Маэстро,
Кодируем все теги <a> в base64, затем производим замену, затем декодируем <a> обратно
Спасибо, попробую такой вариант отпишу по итогам.
---------- Добавлено 30.09.2013 в 00:08 ----------
Маэстро,
Кодируем все теги <a> в base64, затем производим замену, затем декодируем <a> обратно
Cпасибо большое, работает