0

これが私の問題です:

使用するpreg_replace('@\b(word)\b@','****',$text);

テキストのどこに がありますword\word and word、上記は両方をpreg_replace置き換えるため、結果の文字列はです。word\wordword***\word and ***

文字列を : のようにしたいword\word and ***

これは可能ですか?私は何を間違っていますか???

後で編集

URL の配列があります。その配列を foreach し、URL が見つかったテキストを preg_replace しますが、機能しません。

たとえば、私はhttp://www.link.comhttp://www.link.com/somethingを持っています

http://www.link.comがある場合、http://www.link.com/somethingも置き換えます

4

3 に答える 3

3

特定の文字を単語境界としてカウントしないように効果的に指定しています。したがって、次のように「境界」を自分で指定する必要があります。

preg_replace('@(^|[^\w\\])(word)([^\w\\]|$)@','**',$text);

これが行うことは、行境界またはバック スラッシュを除く単語以外の文字で囲まれた単語を検索すること\です。したがって、.wordには一致しますが、.word\や ` \word には一致しません。 他の文字を一致から除外する必要がある場合は、括弧内に追加してください。

于 2012-11-01T10:11:38.943 に答える
0

これは、正規表現を使用しない簡単なソリューションです。単一の単語である「単語」の単一出現のみを置き換えます。

<?php
$text = "word\word word cat dog";
$new_text = "";
$words = explode(" ",$text); // split the string into seperate 'words'

$inc = 0; // loop counter
foreach($words as $word){

    if($word == "word"){ // if the current word in the array of words matches the criteria, replace it
        $words[$inc] = "***";
    }
    $new_text.= $words[$inc]." ";
    $inc ++;
}

echo $new_text; // gives 'word\word *** cat dog'
?>
于 2012-11-01T10:25:01.313 に答える
0

str_replace("word\word", "word\word and")上記のケースで preg_replace を使用する必要がある理由がわかりません。

于 2012-11-01T10:07:38.927 に答える