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
Форумы портала PHP.SU :: Версия для печати :: Исключить слово в ссылке
Форумы портала PHP.SU » PHP » Регулярные выражения » Исключить слово в ссылке

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

1. юрьич - 20 Декабря, 2017 - 07:15:12 - перейти к сообщению
Всем привет.
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. }

Не работает
2. Строитель - 20 Декабря, 2017 - 10:22:28 - перейти к сообщению
юрьич, лучше напишите пример исходной строки, и пример подстроки, которую надо получить в результате.
(Добавление)
"Замена слова в ссылке" - это наверное так?
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);
3. юрьич - 20 Декабря, 2017 - 11:43:09 - перейти к сообщению
Нет,наоборот.) Я произвожу замену в тексте.Но нужно исключить замену,если заменяемое слово есть между тегов или в анкоре ссылки.
4. Строитель - 20 Декабря, 2017 - 11:57:10 - перейти к сообщению
юрьич ... UPD: должно быть так
Спойлер (Отобразить)
5. юрьич - 20 Декабря, 2017 - 17:42:31 - перейти к сообщению
Строитель,от души за помощь,но видно я плохо объясняю.Попробую ещё раз)
Например в тексте нужно заменить слова мама. Оно есть в <p>мама</p>,в <h...>мама</h...> и в <a href="">мама</a>
Так вот нужно, заменить мама на папа, но только не в <h...>мама</h...> и не в <a href="">мама</a>
6. Строитель - 20 Декабря, 2017 - 19:37:14 - перейти к сообщению
юрьич пишет:
Строитель,от души за помощь,но видно я плохо объясняю.Попробую ещё раз)
Например в тексте нужно заменить слова мама. Оно есть в <p>мама</p>,в <h...>мама</h...> и в <a href="">мама</a>
Так вот нужно, заменить мама на папа, но только не в <h...>мама</h...> и не в <a href="">мама</a>
Спойлер (Отобразить)
7. юрьич - 20 Декабря, 2017 - 20:32:04 - перейти к сообщению
Так не пойдёт. Текст в текстовом редакторе.У <p> могут быть разные классы,внутри разные другие теги.Поэтому так не будет работать.
8. Строитель - 20 Декабря, 2017 - 20:33:50 - перейти к сообщению
юрьич из всех этих примеров вы бы уже смогли самостоятельно собрать то, что вам нужно.
9. юрьич - 20 Декабря, 2017 - 21:11:49 - перейти к сообщению
Вот что не выходит.Эти регулярки,тёмный лес.) Ладно,буду пробовать.Спасибо ещё раз.
10. Строитель - 20 Декабря, 2017 - 21:37:50 - перейти к сообщению
юрьич ну здесь-то по сути осталось немного подправить шаблон :
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);
11. юрьич - 21 Декабря, 2017 - 07:47:22 - перейти к сообщению
Так пробовал.Не работает. Вот нашёл решение на другом форуме.
PHP:
скопировать код в буфер обмена
  1. $str = preg_replace("~<(a|h[1-6])\b.*?</\\1>(*SKIP)(*F)|\b$word\b~siu", $word2, $str);

Спасибо за помощь.
12. Строитель - 21 Декабря, 2017 - 07:54:05 - перейти к сообщению
юрьич так я же вам подобное решение в самом начале скидывал, но тогда оно вам почему-то не подошло Радость

 

Powered by ExBB FM 1.0 RC1