2013-09-11 2 views
3

У меня есть массив слов, например:Wrap теги вокруг определенных слов

array("the", "over", "hen"); 

У меня есть строка, как это:

"The quick brown fox jumps over the lazy hen" 

Я хочу, чтобы обернуть тег (strong) вокруг все вхождения слов в массиве, но верьте правилу.

Например, используя предыдущую строку, она будет в конечном итоге, как

<strong>The</strong> quick brown fox jumps <strong>over</strong the lazy <strong>hen</strong> 

Но, если у меня есть это предложение:

"Hen #2 and ThE oveR reactive cow" 

Посмотрел бы, как это:

<strong>Hen</strong> #2 and <strong>ThE</strong> <strong>oveR</strong> reactive cow 

Я предполагаю, что ответ будет использовать регулярное выражение, но я не очень хорош в этом ...

+0

Вы пробовали преобразования в нижний регистр только во время сравнения, затем используя оригинал заменить/окружить вашими тегами? – Fluffeh

+0

@Fluffeh Что значит? Не могли бы вы привести пример того, как я могу это сделать? – cpdt

ответ

6

Попробуйте следующее:

$string = 'Then quick brown fox jumps over the lazy hen'; 
$keys = array('the', 'over', 'hen'); 

$patterns = array(); 
foreach($keys as $key) 
    $patterns[] = '/\b('.$key.')\b/i'; 

echo preg_replace($patterns, '<strong>$0</strong>', $string); 
+0

Удивительный! Он работает – cpdt

+0

Если я что-то пропустил, сообщите мне об этом. – Bora

0

Я думаю, что это должно работать, дать ей идти :)

$replaceWords=array("the", "over", "hen"); 

$string="The quick brown fox jumps over the lazy hen"; 
$string_words=explode(" ", , $string); 

foreach $string_words as $i=>$word { 
    if (FALSE===array_search(strtolower($word),$replaceWords)) 
     continue; 

    $string_words[i]="<strong>".$strin_words[i]."</strong>"; 
} 
$new_string=implode(" ",$string_words); 
echo $new_string; 
+0

Nope - все замещенные слова строчные: – cpdt

+0

Хмммм хорошо, теперь я получаю то, что вы хотите! –

0
<?php 

$keys = array("the", "over", "hen"); 

$strings[] = array(
    "The quick brown fox jumps over the lazy hen", 
    "Hen #2 and ThE oveR reactive cow. The The. Bus" 
); 

foreach ($keys as $key) 
{ 
    $cKeys[] = ucfirst($key); 
} 

for ($i = 0; $i < count($strings); $i++) 
{ 
    foreach ($keys as $key) 
    { 
     $strings[$i] = preg_replace("/$key/", '<b>$0</b>', $strings[$i]); 
    } 
    foreach ($cKeys as $key) 
    { 
     $strings[$i] = preg_replace("/(^|\.)($key)/", '$1<b>$2</b>', $strings[$i]); 
    } 
} 

var_dump($strings); 
+0

Nope - не меняя первый 'The' – cpdt

+0

Исправлено выделение жирным шрифтом любых слов, имеющих первый символ в начале и строки в начале строки или после предложения. Я думаю, что, возможно, неправильно понял ваш вопрос. – C9HDN

Смежные вопросы