- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как удалить плохие SEO-ссылки и очистить ссылочную массу сайта
Применяем отклонение ссылок
Сервис Rookee
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть такая строка:
$string = "Голосовой работает на базе <a href=\"/link.html\">технологии помощник нейронных</a> сетей помощник, голосовой помощник работает".
В строке трижды встречается слово "помощник".
Мне нужно заменить в строке $string первое вхождение слова "помощник", но только в том случае, если оно не находится внутри тегов <a href="...> </a>. Т.е. в данном случае замене подлежит слово "помощник" после слова "сетей".
"помощник" нужно заменить на строку вида: <a href="/помощник.html">помощник</a>.
Задача выглядит очень простой, но составить регулярку оказалось мне не подсилу.
Пожалуйста помогите.
Пробовал так:
preg_replace("/помощник[W]?.*(?!(?<!(<a\s+.*(?!</a>)))</a>)/", "<a href=\"$1.html\">$1</a>, $string);
Спасибо
https://regex101.com/r/J7Ioio/1
#(<a\b.+?</a>(*SKIP)(*F)|помощник)#s
http://sandbox.onlinephpfunctions.com/code/b40cda9e2584294146c12245c6fbad45f65f16d5
#(<a\b.+?</a>(*SKIP)(*F)|помощник)#s
http://sandbox.onlinephpfunctions.com/code/b40cda9e2584294146c12245c6fbad45f65f16d5
Огромное спасибо! Отлично работает!
Подскажите пожалуйста, как доработать эту функцию:
дело в том что если строка имеет вид:
$string = "Голосовой работает на базе технологии <a href=\"/помощник.html\">помощник</a> нейронных сетей помощник, голосовой помощник работает".
то после обработки она:
Голосовой работает на базе технологии <a href="/помощник.html">помощник</a> нейронных сетей <a href="/помощник.html">помощник</a>, голосовой помощник работает.
Т.е. на слово помощник 2 ссылки.
Мне нужно чтобы регулярка проверяла, что между тегами <a></a> "помощник" не единственное слово и если слово в тегах единственное, то замена не производится совсем! Чтобы не было одинаковых ссылок на странице..
С П А С И Б О
#(<a\b.+?</a>(*SKIP)(*F)|помощник)#s
http://sandbox.onlinephpfunctions.com/code/b40cda9e2584294146c12245c6fbad45f65f16d5
желательно еще проверять границы слова, а то некрасиво может получиться:
"сетей помощников," - сетей <a href="/помощник.html">помощник</a>ов,
немного поправил:
$text = preg_replace('#\s?(<a\b.+?</a>(*SKIP)(*F)|помощник)\b#su', '<a href="/$1.html">$1</a>', $text, 1);
Мне нужно чтобы регулярка проверяла, что между тегами <a></a> "помощник" не единственное слово и если слово в тегах единственное, то замена не производится совсем! Чтобы не было одинаковых ссылок на странице..
сначала проверяйте, что нет ссылок, а потом если нужно проводите замену.