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

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 14 октября 2016 в 10:20
Всем привет!

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

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

Помогите составить регулярку, не получается самому!
#3 20 декабря 2017 в 15:21
Подскажите, почему в онлайн редактора работает, а на сайте нет?
  1. ~(?:(?:<h\\d>.+?<\/h\\d>)?(?:<a\\s*href=[^>]+>.+?>)\\K(\\s*\bслово\b\\s*))~uix
#4 20 декабря 2017 в 15:27
Вадим Нарочный, напишите где конкретно на сайте?
Многие переменные фильтруются для безопасности glasses
#5 20 декабря 2017 в 15:29

напишите где конкретно на сайте?

Sonat

На тестовом сайте на iCMS 2. Получается на любом)
#6 20 декабря 2017 в 15:29

Многие переменные фильтруются для безопасности

Sonat

Как отключить для проверки?
#7 20 декабря 2017 в 15:41
— Подскажите, почему в онлайн редактора работает, а на сайте нет?
— Напишите где конкретно на сайте?
— На тестовом сайте на iCMS 2. Получается на любом)


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


Как отключить для проверки?

Вадим Нарочный
Никак
#8 20 декабря 2017 в 16:30
  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.  
Замена не производится!
#9 20 декабря 2017 в 17:44
Вадим Нарочный, стало гораздо понятнее.
Полагаю, замена не производится потому что ошибки в шаблоне.
Попытался разобрать его, но моего опыта не хватило sadможет кто поумнее подскажет...
Я даже понятия не имею зачем тут \\K и что он значит в регулярках facepalm


А что за онлайн редактор в котором это работало?
#10 20 декабря 2017 в 17:45

Я даже понятия не имею зачем тут \\K и что он значит в регулярках

Sonat
\K — сброс начала совпадения

А что за онлайн редактор в котором это работало?

Sonat
easyregexp.ru/constructor
#11 20 декабря 2017 в 17:46

\K — сброс начала совпадения

Вадим Нарочный
Так может как раз в нем дело? scratchНе все библиотеки его поддерживают
qaru.site/questions/3773/support-of-k-in-regex
#12 20 декабря 2017 в 17:48

Так может как раз в нем дело? Не все библиотеки его поддерживают
qaru.site/questions/3773/support-of-k-in-regex

Sonat
Управляющая последовательность \K поддерживается несколькими двигателями, языками или инструментами, такими как:
PHP (начиная с 5.2.4)
#13 20 декабря 2017 в 19:31
Какая-то хитромудрая конструкция, я ничего не понял.
Испытайте в другом редакторе regex101.com
#14 20 декабря 2017 в 19:33

Испытайте в другом редакторе regex101.com

Pocus
ДА в редакторах работает, а вот на сайте или хотя бы здесь, нет!
#15 21 декабря 2017 в 14:48
Спасибо пользователю lora, составил регулярку за низкую цену)
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.