Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Исключить слово в ссылке

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
юрьич
Отправлено: 20 Декабря, 2017 - 07:15:12
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Сент. 2012  


Помог: 0 раз(а)




Всем привет.
PHP:
скопировать код в буфер обмена
  1. $str = $article['content'];
  2. $tags  = array('h1','h2','h3','h4','h5','h6');
  3. $word = 'topic';
  4. $word2 = 'Замена';
  5. foreach($tags as $tag){
  6.    
  7. if (!preg_match('|<'.$tag.'[^>]*?>'.$word.'</'.$tag.'>|sei', $str) ){
  8.    
  9.     $article['content'] = preg_replace('/(\b)'.$word.'(\b)/iu','$1'.$word2.'$2',$str);
  10.  
  11.    
  12.     }
  13.  
  14. }

Нужно добавить ещё условие, что бы исключить замену слова, которые являются анкором ссылки!Подскажите регулярку, а то что то не выходит.)
(Добавление)
Попробовал добавить в массив тег а, не работает.(
(Добавление)
Сделал так
PHP:
скопировать код в буфер обмена
  1. $pattern = "/<a (.+?) href='[^>]+'>(\b)".$word."(\b)/iu<\/a>/";
  2. if (!preg_match($pattern, $str)){
  3.         $article['content'] = preg_replace('/(\b)'.$word.'(\b)/iu','$1'.$word2.'$2',$str);
  4. }

Не работает
 
 Top
Строитель Модератор
Отправлено: 20 Декабря, 2017 - 10:22:28
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




юрьич, лучше напишите пример исходной строки, и пример подстроки, которую надо получить в результате.
(Добавление)
"Замена слова в ссылке" - это наверное так?
PHP:
скопировать код в буфер обмена
  1. $str = 'Нужно добавить ещё условие, что бы исключить замену слова, которые являются анкором ссылки!<a href="#">Подскажите регулярку, а то что то не выходит</a> Попробовал добавить в массив тег а, не работает.';
  2.  
  3. $patt = '~(<a[^>]*>)[^<]+(</a>)~';
  4. $repl = '$1Замена$2';
  5.  
  6. echo preg_replace($patt, $repl, $str);

(Добавление)
Вот так будет происходить замена текста в любых тегах (если вам именно это было нужно)
PHP:
скопировать код в буфер обмена
  1. $str = 'Нужно <h1>добавить ещё</h1> условие, <h2>что бы</h2> исключить замену слова, <h3>которые являются</h3> анкором ссылки! <a href="#">Подскажите регулярку, а то что то не выходит</a> <h4>Попробовал добавить</h4> <p>в массив тег а, не</p> работает.';
  2.  
  3. $patt = '~(<([a-z]\d?)[^>]*>)[^<]+(</\2>)~';
  4. $repl = '$1Замена$3';
  5.  
  6. echo preg_replace($patt, $repl, $str);

(Добавление)
А если надо производить замену только для тегов h(№) и a, тогда так:
PHP:
скопировать код в буфер обмена
  1. $str = 'Нужно <h1>добавить ещё</h1> условие, <h2>что бы</h2> исключить замену слова, <h3>которые являются</h3> анкором ссылки! <a href="#">Подскажите регулярку, а то что то не выходит</a> <h4>Попробовал добавить</h4> <p>в массив тег а, не</p> работает.';
  2.  
  3. $patt = '~(<([ha]\d?)[^>]*>)[^<]+(</\2>)~';
  4. $repl = '$1Замена$3';
  5.  
  6. echo preg_replace($patt, $repl, $str);
 
 Top
юрьич
Отправлено: 20 Декабря, 2017 - 11:43:09
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Сент. 2012  


Помог: 0 раз(а)




Нет,наоборот.) Я произвожу замену в тексте.Но нужно исключить замену,если заменяемое слово есть между тегов или в анкоре ссылки.
 
 Top
Строитель Модератор
Отправлено: 20 Декабря, 2017 - 11:57:10
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




юрьич ... UPD: должно быть так
Спойлер (Отобразить)

(Отредактировано автором: 20 Декабря, 2017 - 13:44:28)

 
 Top
юрьич
Отправлено: 20 Декабря, 2017 - 17:42:31
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Сент. 2012  


Помог: 0 раз(а)




Строитель,от души за помощь,но видно я плохо объясняю.Попробую ещё раз)
Например в тексте нужно заменить слова мама. Оно есть в <p>мама</p>,в <h...>мама</h...> и в <a href="">мама</a>
Так вот нужно, заменить мама на папа, но только не в <h...>мама</h...> и не в <a href="">мама</a>
 
 Top
Строитель Модератор
Отправлено: 20 Декабря, 2017 - 19:37:14
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




юрьич пишет:
Строитель,от души за помощь,но видно я плохо объясняю.Попробую ещё раз)
Например в тексте нужно заменить слова мама. Оно есть в <p>мама</p>,в <h...>мама</h...> и в <a href="">мама</a>
Так вот нужно, заменить мама на папа, но только не в <h...>мама</h...> и не в <a href="">мама</a>
Спойлер (Отобразить)
 
 Top
юрьич
Отправлено: 20 Декабря, 2017 - 20:32:04
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Сент. 2012  


Помог: 0 раз(а)




Так не пойдёт. Текст в текстовом редакторе.У <p> могут быть разные классы,внутри разные другие теги.Поэтому так не будет работать.
 
 Top
Строитель Модератор
Отправлено: 20 Декабря, 2017 - 20:33:50
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




юрьич из всех этих примеров вы бы уже смогли самостоятельно собрать то, что вам нужно.
 
 Top
юрьич
Отправлено: 20 Декабря, 2017 - 21:11:49
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Сент. 2012  


Помог: 0 раз(а)




Вот что не выходит.Эти регулярки,тёмный лес.) Ладно,буду пробовать.Спасибо ещё раз.
 
 Top
Строитель Модератор
Отправлено: 20 Декабря, 2017 - 21:37:50
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




юрьич ну здесь-то по сути осталось немного подправить шаблон :
PHP:
скопировать код в буфер обмена
  1. $str = '<p>мама</p>, <h4>мама <p>мама</p> </h4>, <a href="">мама</a>';
  2.  
  3. $need = 'мама';
  4. $repl = 'папа';
  5.  
  6. echo preg_replace("~(<p[^>]*>)$need(</p>)~", "\$1$repl\$2", $str);
 
 Top
юрьич
Отправлено: 21 Декабря, 2017 - 07:47:22
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Сент. 2012  


Помог: 0 раз(а)




Так пробовал.Не работает. Вот нашёл решение на другом форуме.
PHP:
скопировать код в буфер обмена
  1. $str = preg_replace("~<(a|h[1-6])\b.*?</\\1>(*SKIP)(*F)|\b$word\b~siu", $word2, $str);

Спасибо за помощь.
 
 Top
Строитель Модератор
Отправлено: 21 Декабря, 2017 - 07:54:05
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




юрьич так я же вам подобное решение в самом начале скидывал, но тогда оно вам почему-то не подошло Радость
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB