2010-03-20 26 views

Odpowiedz

39

Spróbuj tego:

preg_replace("/\w*?$keyword\w*/i", "<b>$0</b>", $str) 

\w*? mecze wszelkie znaki słowne przed słowo kluczowe (najmniej jak to możliwe) i \w* dowolne znaki słowne po słowie kluczowym.

A ja polecam użyć preg_quote uciec słowa kluczowego:

preg_replace("/\w*?".preg_quote($keyword)."\w*/i", "<b>$0</b>", $str) 

Na wsparcie Unicode, należy użyć flagi u i \p{L} zamiast \w:

preg_replace("/\p{L}*?".preg_quote($keyword)."\p{L}*/ui", "<b>$0</b>", $str) 
+0

gratulacje, działa dziękuję – Simon

+0

+1. Działa i szybka odpowiedź Dlaczego? we wzorcu? – sberry

+0

@ sberry2A: Wyrażenia regularne PCRE są chciwy domyślnie Oznacza to, że kwantyfikator jest rozszerzany do maksymalnej możliwej liczby powtórzeń. '' 'powoduje, że kwantyfikator staje się nierównomierny, więc dopasowuje się możliwie najmniej powtórzeń. (Zobacz także http://www.regular-expressions.info/ repeat.html) – Gumbo

4

można wykonać następujące czynności:

$str = preg_replace("/\b([a-z]*${keyword}[a-z]*)\b/i","<b>$1</b>",$str); 

Przykład:

$str = "Its fun to be funny and unfunny"; 
$keyword = 'fun'; 
$str = preg_replace("/\b([a-z]*${keyword}[a-z]*)\b/i","<b>$1</b>",$str); 
echo "$str"; // prints 'Its <b>fun</b> to be <b>funny</b> and <b>unfunny</b>' 
+0

@codaddict wiem, że w regularnych wyrażeń $ oznacza koniec czegoś. , ale co to znaczy w scenariuszu? i dlaczego {simbols zamiast (? – Simon

+0

@Syom: To jest tylko dla PHP, aby rozróżnić między zmiennymi a literalną zawartością łańcucha w podwójnie cytowanych deklaracjach łańcuchowych: '" $ foobar "' zostanie oszacowane do wartości '$ foobar', podczas gdy '" ($ foo} bar "'/'" $ {foo} bar "' zostanie ocenione na wartość '$ foo' połączoną z' bar'. Patrz http://php.net/manual/en/language .types.string.php # language.types.string.parsing dla dalszych informacji – Gumbo

-2

wyszukiwanie i podświetlić słowo w łańcuchu, tekście, treści i akapicie:

<?php $body_text='This is simple code for highligh the word in a given body or text'; //this is the body of your page 
$searh_letter = 'this'; //this is the string you want to search for 
$result_body = do_Highlight($body_text,$searh_letter); // this is the result with highlight of your search word 
echo $result_body;   //for displaying the result 
function do_Highlight($body_text,$searh_letter){  //function for highlight the word in body of your page or paragraph or string 
    $length= strlen($body_text); //this is length of your body 
    $pos = strpos($body_text, $searh_letter); // this will find the first occurance of your search text and give the position so that you can split text and highlight it 
    $lword = strlen($searh_letter); // this is the length of your search string so that you can add it to $pos and start with rest of your string 
    $split_search = $pos+$lword; 
    $string0 = substr($body_text, 0, $pos); 
    $string1 = substr($body_text,$pos,$lword); 
    $string2 = substr($body_text,$split_search,$length); 
    $body = $string0."<font style='color:#FF0000; background-color:white;'>".$string1." </font> ".$string2; 
    return $body; 
    } ?> 
+0

To jest bardzo prosty przykład, możesz po prostu skopiować wklej i zmienić zgodnie z wymogiem ur. –

+0

twoje rozwiązania zawierają ten sam problem, o który pyta OP, podświetla tylko znaki pasujące do słowa kluczowego, a nie słowo zawierające znaki. –

1
<?php 
$str = "my bird is funny"; 

$keyword = "fun"; 
$look = explode(' ',$str); 

foreach($look as $find){ 
    if(strpos($find, $keyword) !== false) { 
     if(!isset($highlight)){ 
      $highlight[] = $find; 
     } else { 
      if(!in_array($find,$highlight)){ 
       $highlight[] = $find; 
      } 
     } 
    } 
} 

if(isset($highlight)){ 
    foreach($highlight as $replace){ 
     $str = str_replace($replace,'<b>'.$replace.'</b>',$str); 
    } 
} 

echo $str; 
?> 
+0

Użyj 'str_ireplace()' zamiast 'str_replace()', w którym nie jest rozróżniana wielkość liter 'str_replace()' –

-1

tu jestem dodania wielu szukanie na sznurku celach

$keyword = ".in#.com#dot.com#1#2#3#4#5#6#7#8#9#one#two#three#four#five#Six#seven#eight#nine#ten#dot.in#dot in#"; 

$keyword = implode('|',explode('#',preg_quote($keyword))); 

$str = "PHP is dot .com the amazon.in 123455454546 dot in scripting language of choice."; 

$str = preg_replace("/($keyword)/i","<b>$0</b>",$str); 
echo $str; 
+0

Dzięki Walery Strauch – Johnson