2015-10-22 7 views
0

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

Например:

$keyword='span'; 

$string='<span>Set color of the string inside span.</span>'; 

и используя следующую функцию:

$str = preg_replace("/($keyword)/i","<span style='color:orange;'>$0</span>",$string); 

Теперь проблема в том, что выдвигает на первый план «пядь» ключевое слово оба диапазона тега и пролетом внутри строки, но Я хочу выделить «span» внутри строки только не самого тега span, но не знаю, как это сделать.

И я хочу сделать все это без использования strip_tags.

+0

В вашем примере, не существует «цвет» в вашем файле 'style' атрибута, но в любом случае я получаю идею. С одним регулярным выражением это будет боль. Вам лучше было бы предварительно очистить '$ string', т. Е. Извлечь то, что находится между' ', заменить ли вы, а затем добавить '' и''. – rlanvin

+0

Я отредактировал свой вопрос, пожалуйста, просмотрите его –

+0

Похоже, что это возможно в следующем дубликате: http://stackoverflow.com/questions/4603780/preg-replace-only-outside-tags-were-not-talking-full-html- parsing-jus – Typoheads

ответ

2

Надеется, что это поможет

<?php 

$keyword='span'; 

$str='<span>Set color of the string inside span.</span>'; 

echo preg_replace("/(?<!<|\/)$keyword/i",'<span style="color:red;">$0</span>',$str); 
+0

, но как вы это сделаете без использования strip_tags, я не хочу удалять какой-либо из тегов из html –

+0

@ Insomania Я не удаляю ни одного тега html из строки. –

+0

@Insomania запускает код и просматривает исходный код в браузере, все html-теги сохраняются. –

0

Я думаю, что проблема в том, что вы пытаетесь разобрать HTML-код. Я бы предложил удалить теги HTML, затем разобрать простой текст и затем вставить его в конечный html-код.

$keyword='span'; 
$string='<span>Set color of the string inside span.</span>'; 
$string_notags = strip_tags($string); //remove html tags 
echo "<span>".preg_replace("/(".$keyword.")/iu", "<span style=\"color:red\">$1</span>", $string_notags)."</span>"; 
+0

, но как бы вы это сделали, не используя strip_tags, я не хочу удалять теги из html –

0

У меня есть два решения, как по вашему сценарию коды. Надеюсь, оба эти решения будут работать для вас

  1. $str = preg_replace("/^\s($keyword)[^>]/i","<span style='color:orange;'>$0</span>",$string);
  2. $str = preg_replace("/[^<]($keyword)[^>]/i","<span style='color:orange;'>$0</span>",$string);
Смежные вопросы