0


0

このpreg_replaceが置換テキストの最初のインスタンスをスキップするのはなぜですか?

以下の置換スクリプトでは、$ myKeywordが「test」で置換テキストが「This、test can be test」である場合、置換テキストは「This、test can a test」になると予想されます。

しかし、私が得ているものは次のとおりです。これ、テストは*テスト*になります。

キーワード「テスト」の最初のインスタンスをスキップする理由を判断しようとしています。

function save_rseo_content($content){
    global $post;
    $mykeyword = rseo_getKeyword($post);
    $mykeyword = " ".preg_quote($mykeyword, '/');

     /*had to add " " before keyword so that the it skips the instance
       where the keyword has already been formatted. Only matches " keyword"*/

    $theContent =
    preg_replace_callback("/\b($mykeyword)\b/i","doReplace", $content);
return $theContent;
}

function doReplace($matches)
{
    static $count = 0;
    switch($count++) {
    case 0: return ' '.trim($matches[1]).'';
    case 1: return ' '.trim($matches[1]).'';
    case 2: return ' '.trim($matches[1]).'';
    default: return $matches[1];
        }
}

1 Answer


0


キーワードの前にスペースを検出するよりも、おそらく>文字にネガティブな後読みを使用した方が良いでしょう。

preg_replace_callback("/\b(?)($mykeyword)\b/i","doReplace", $content);