3

テキストから特定の単語を検索し、その単語の周りに html タグを追加しようとしています。

問題、文字列を検索する単語はテキストファイルに保存され、大文字、小文字などにすることができます.preg_replaceを使用してこれを行うと、タグを追加して正しく置き換えることができますが、たとえばAPPLESと文字列に「りんご」が含まれていると、フォーマットがりんごからAPPLESに変更されます。フォーマットを同じままにしておきます。

preg_replace を使用してみましたが、同じ単語のケーシングを維持する方法が見つかりません。これは私が持っているものです:

foreach($keywords as $value)
    {
        $pattern = "/\b$value\b/i";
        $replacement = "<b>$value</b>";
        $new_string = preg_replace($pattern, $replacement, $string);
    }

したがって、$value が APPLES の場合、$replacemant の $value が "APPLES" であるため、$string 内のリンゴのすべてのケース形式が大文字に変更されます。

ケース形式が同じままで、異なるバージョンのケース形式で複数のループを実行する必要なく、どうすればこれを達成できますか?

ありがとう

4

3 に答える 3

2

$value置換で verbatimを使用する代わりに、リテラル文字列\0または$0. \n/$nが一部の整数に対して、括弧のthキャプチャ グループをn参照するように、 /は一致全体に展開されます。したがって、あなたはn\0$0

foreach ($keywords as $value) {
  $new_string = preg_replace("/\\b$value\\b/i", '<b>$0</b>', $string);
}

一重引用符を使用していることに注意してください'<b>$0</b>'。変数への参照として解釈されないため、ここでは二重引用符を使用できます$0が、これはより明確だと思います。一般に、二重引用符で囲まれた文字列内で a を使用する場合は注意が必要です。 as$をエスケープしない限り、既存の変数への参照を取得することが多いためです。同様に、パターンの二重引用符内のバックスラッシュをエスケープする必要があります。この特定のケースでは問題ではありませんが、一般的にバックスラッシュは二重引用符内の意味のある文字です。$\$\b

于 2012-09-09T23:28:26.423 に答える
0

私はあなたの質問を誤解しているかもしれませんが、あなたが苦労しているのは大文字 (APPLE) と小文字 (apple) の区別である場合、最初にできることは単語を大文字に変換することです。小文字にしてから、テストを実行してそれを見つけ、その周りに HTML タグを配置します。それは私の推測であり、おそらく私は質問を完全に誤解していました。

于 2012-09-09T23:26:58.813 に答える
0

コードにオフトピック エラーが存在します: 結果の値は、最初のループ反復では書き換えられませんでした。の終了値は$new_string最後の置換のみになります。

于 2012-09-09T23:37:42.293 に答える