0

以下の関数では、大文字と小文字を区別しないキーワードに一致させたい(「BlueYogaMats」と「blueyogamats」に一致する必要があります)...

ただし、現在、キーワードが同じ場合にのみ一致します。

$ mykeyword="ブルーヨガマット";

$post->post_content = preg_replace_callback("/\b($mykeyword)\b/","doReplace", $post->post_content);

// the callback function
function doReplace($matches)
{
    static $count = 0;

    // switch on $count and later increment $count.
    switch($count++) {
        case 0: return '<b>'.$matches[1].'</b>';   // 1st instance, wrap in bold
        case 1: return '<em>'.$matches[1].'</em>'; // 2nd instance, wrap in italics
        case 2: return '<u>'.$matches[1].'</u>'; // 3rd instance, wrap in underline
        default: return $matches[1];              // don't change others.
            }
    }
4

5 に答える 5

3

正規表現に修飾子を追加するだけiで、大文字と小文字を区別しない一致が実行されます。

"/\b($mykeyword)\b/i"

ちなみに、まだ行っていない場合は、キーワードから特殊な正規表現文字をエスケープする必要があります。いずれかが存在する場合、それらは正規表現を台無しにし、PHPの警告/エラーを引き起こす可能性があります。preg_quote()交換を行う前に電話してください。

$mykeyword_escaped = preg_quote($mykeyword, '/');
$post->post_content = preg_replace_callback("/\b($mykeyword_escaped)\b/i","doReplace", $post->post_content);
于 2010-10-29T16:44:55.080 に答える
0

正規表現に「i」修飾子を追加します。

/\b($mykeyword)\b/i
于 2010-10-29T16:45:38.047 に答える
0
$post->post_content = preg_replace_callback("/\b($mykeyword)\b/i","doReplace", $post->post_content);

TOKENregexpTOKENi大文字と小文字を区別しない検索を実行するために使用します。

修飾子の詳細については、PHPマニュアルのパターン修飾子を参照してください。

于 2010-10-29T16:45:45.987 に答える
0

/i修飾子を使用します。

$post->post_content = preg_replace_callback("/\b($mykeyword)\b/i","doReplace", $post->post_content);
于 2010-10-29T16:46:00.277 に答える
0

T-Regxライブラリを使用することもできます。

<?php
pattern('\b($mykeyword)\b')->replace($post->post_content)->callback('doReplace');
      // ↑ Delimiters are not required 

また、を使用すると、$mykeywordユーザー入力文字がパターンを壊す可能性があります。T-Regxを使用すると、準備されたパターンを使用して、パターンを作成することができます。

<?php
$pattern = Pattern::inject("\b(@keyword)\b", [
    'keyword' => $mykeyword  
    // quoting unsafe characters
]);
$pattern->replace($post->post_content)->callback('doReplace');
于 2019-05-12T22:18:03.577 に答える