pregを初めて使用し、配列で取得した文字列をいくつか見つけて、それぞれを強調したいと考えています。
例えば。
array[0] = "windows";
array[0] = "windows xp";
text will be: <em>windows</em> is bla bla...<em>windows xp</em> is bla bla
どうすればそれができますか?
非常に簡単な交換、preg_ *の必要はありません:
$mytest = "Windows XP was all right, but I like Windows 7 better!°";
$replacement = "Windows XP";
echo str_replace($replacement, "<em>".$replacement."</em>", $mytest);
アレイを置き換えることもできます。【手動入力】【1】
テキストを検索して置換する場合、これは簡単です。
$text = 'windows xp';
$input = '....';
$output = str_replace($text, '<em>' . $text . '</em>', $input);
HTMLのブロックが文字列として保存されている場合、考慮すべき別の問題があります。ユーザーが検索するテキストがタグまたは属性の名前または値の一部である場合はどうなるでしょうか。「強い」を強調したい場合は、これを置き換えたくありません。
<strong>some text</strong>
と:
<<em>strong</em>>some text</<em>strong</em>>
マークアップは無効になります。
これは、マークアップで単純な検索と置換または正規表現を使用する場合の問題です。これを処理する最良の方法は、マークアップをDOMツリーに変換してから、テキストノードで置換を行ってそれをウォークアップすることです。それでも問題があります。「windowsxp」を強調表示する場合は、次の場合を強調表示しますか。
windows <i>xp</i>
これを使用するには、「windows xp」と表示されるため、ユーザーがそれを強調表示したいと考えるのが妥当です。
$string = preg_replace("(windows( xp)?)", "<em>$0</em>", $string)