Tırnakla görmezden PHP preg_replace işlevini kullanarak karmaşık model yedek

2 Cevap php

Consider the following string:

this is a STRING WHERE some keywords ARE available. 'i need TO format the KEYWORDS from the STRING'

Yukarıdaki dize anahtar vardır STRING ve WHERE

Now i need to get an output as follows:

this is a <b>STRING</b> <b>WHERE</b> some keywords ARE available. 'i need TO format the KEYWORDS from the STRING'

So that the html output will be like:

this is a STRING WHERE some keywords ARE available. 'i need TO format the KEYWORDS from the STRING'

Bir alıntı ('...') dize içinde anahtar kelimeler göz ardı edilecek unutmayın. Yukarıdaki örnekte i tırnaklı dizge içinde STRING anahtar yok.

Verin bir modified version ve ben yukarıdaki gibi istenilen sonuç var böylece PHP komut şu:

$patterns = array('/STRING/','/WHERE/');
$replaces = array('<b>STRING</b>', '<b>WHERE</b>');
$string   = "this is a STRING WHERE some keywords ARE available. 'i need TO format the KEYWORDS from the STRING'";
preg_replace($patterns, $replaces, $string);

2 Cevap

Bu dize örnek ile çalışır, ancak kesme ile bu içeren kelimeleri örneğin, daha karmaşık dizeleri ile sorunlar olacaktır. Yine de, bir başlangıç ​​noktası olarak kullanılabilir.

$keywords = array("STRING", "WHERE");
$regexp = '/(\'[^\']+\')|\b(' . implode('|', $keywords) . ')\b/e';
preg_replace($regexp, "strlen('\\2') ? '<b>\\2</b>' : '\\0'", $string);

Böyle bir şey deneyin:

$keywords = array(
  'STRING' ,
  'WHERE' ,
  'KEYWORDS'
);
$keywordsRE = array();
foreach( $keywords as $w ) {
  $keywordsRE[] = '/\b('.$w.')\b/';
}
$string = "this is a STRING WHERE some keywords KEYWORDS ARE available. 'i need TO format the KEYWORDS from the STRING'";
$stringParts = explode( "'" , $string );
foreach( $stringParts as $k => $v ) {
  if( !( $k%2 ) )
    $stringParts[$k] = preg_replace( $keywordsRE , '<b>$1</b>' , $v );
}
$stringReplaced = implode( "'" , $stringParts );

Tüm maçlar (<b></b> etiketleri maçları sarma Bu durumda,) bu aynı değişiklikleri uygulamak için izin veren bir Düzenli ifadeler kullanarak - (aynı değişiklikleri ile) aynı anahtar kelimeleri tekrar biraz gereksiz olduğunu.