Заменить слова в тексте, которые не находятся между тегов ,

 
Посетитель
small user social cms
Медаль
Сообщений: 232
Всем привет!

Нужно в тексте определенные слова сделать ссылками.

С помощью preg_replace это делается без труда, но нужно заменить только те слова, которые не являются уже ссылками и которые не стоят между тегов h1-h6, плюс к этому всему нужно в тексте заменить только первое вхождение каждого слова (в тексте может быть много слов-замен)

Помогите составить регулярку, не получается самому!
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 2596
Посмотрите здесь https://pureform.wordpress.com/2008/01/04/matching-a-word-characters-outside-of-html-tags/
Реклама
cms
Посетитель
small user social cms
Медаль
Сообщений: 232
Подскажите, почему в онлайн редактора работает, а на сайте нет?
Код PHP:
  1. ~(?:(?:<h\\d>.+?<\/h\\d>)?(?:<a\\s*href=[^>]+>.+?>)\\K(\\s*\bслово\b\\s*))~uix
Редактировалось: 1 раз (Последний: 20 декабря 2017 в 15:21)
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1147
Вадим Нарочный, напишите где конкретно на сайте?
Многие переменные фильтруются для безопасности glasses
Посетитель
small user social cms
Медаль
Сообщений: 232
Sonat:
напишите где конкретно на сайте?

На тестовом сайте на iCMS 2. Получается на любом)
Посетитель
small user social cms
Медаль
Сообщений: 232
Sonat:
Многие переменные фильтруются для безопасности

Как отключить для проверки?
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1147
- Подскажите, почему в онлайн редактора работает, а на сайте нет?
- Напишите где конкретно на сайте?
- На тестовом сайте на iCMS 2. Получается на любом)


Вы уверены что это конкретика? И теперь всем понятно куда вы эту строку вставляете? crazy


Вадим Нарочный:
Как отключить для проверки?
Никак
Посетитель
small user social cms
Медаль
Сообщений: 232
Код PHP:
  1.  
  2. $text = 'Слово не воробей';
  3.  
  4. $q = 'Замена';
  5. $reg = '~(?:(?:<h\\d>.+?<\/h\\d>)?(?:<a\\s*href=[^>]+>.+?>)\\K(\\s*\bслово\b\\s*))~uix';
  6. $result = preg_replace($reg, $q, $text, 1);
  7.  
  8. echo $result;
  9.  
Замена не производится!
Редактировалось: 1 раз (Последний: 20 декабря 2017 в 16:30)
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1147
Вадим Нарочный, стало гораздо понятнее.
Полагаю, замена не производится потому что ошибки в шаблоне.
Попытался разобрать его, но моего опыта не хватило sad может кто поумнее подскажет...
Я даже понятия не имею зачем тут \\K и что он значит в регулярках facepalm


А что за онлайн редактор в котором это работало?
Посетитель
small user social cms
Медаль
Сообщений: 232
Sonat:
Я даже понятия не имею зачем тут \\K и что он значит в регулярках
\K - сброс начала совпадения

Sonat:
А что за онлайн редактор в котором это работало?
http://easyregexp.ru/constructor
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1147
Вадим Нарочный:
\K - сброс начала совпадения
Так может как раз в нем дело? scratch Не все библиотеки его поддерживают
http://qaru.site/questions/3773/support-of-k-in-regex
Посетитель
small user social cms
Медаль
Сообщений: 232
Sonat:
Так может как раз в нем дело? Не все библиотеки его поддерживают
http://qaru.site/questions/3773/support-of-k-in-regex
Управляющая последовательность \K поддерживается несколькими двигателями, языками или инструментами, такими как:
PHP (начиная с 5.2.4)
Посетитель
small user social cms
МедальПочетный донор проекта
Сообщений: 420
Какая-то хитромудрая конструкция, я ничего не понял.
Испытайте в другом редакторе https://regex101.com
Посетитель
small user social cms
Медаль
Сообщений: 232
Pocus:
Испытайте в другом редакторе https://regex101.com
ДА в редакторах работает, а вот на сайте или хотя бы здесь, нет!
Посетитель
small user social cms
Медаль
Сообщений: 232
Спасибо пользователю lora, составил регулярку за низкую цену)
В начало страницы
Предыдущая темаСледующая тема Перейти на форум: