-1

重複の可能性:
単語に特定の文字列が含まれている場合は、単語全体を削除します

単語を含む単語全体を削除するにはどうすればよいですか?たとえば、「リリース」はリリース済み、リリースリリースなどを削除する必要があります。

/* Read in from the file here, not in the function - you only need to read the file once */
$wordlist = array('release','announce');

/* Sample data */
$words = 'adobe releases releases Acrobat X';

foreach ($wordlist as $v)
      $words = clean($v,$words);

function clean($wordlist,$value)
{
        return preg_replace("/\b$wordlist\b/i", '***',trim($value));
}  

echo 'Words: '.$words.PHP_EOL;
4

3 に答える 3

3

この REGEXP を使用します。

return preg_replace("/\w*$wordlist\w*/i", '***', trim($value));

コードに適用すると、次のようになります。

foreach ($wordlist as $v)
  $words = clean($v, $words);

function clean($word, $value) {
    return preg_replace("/\w*$word\w*/i", '***',trim($value));
}

(配列の名前でもあるため、わかりやすくするために名前を変更$wordlistしたことに注意してください)$word$wordlist

于 2013-01-02T08:26:17.610 に答える
3

あなたはあなたをループすることができます$wordlist

function clean($wordlist,$value)
{
    foreach ($wordlist as $word) {
        $value = preg_replace("/\b\w*$word\w*\b/i", '***', trim($value));
    }

    return $value;
}  

1回の置換でそれを行う

function clean($wordlist,$value)
{
    $all_words = implode('|', $wordlist);
    return preg_replace("/\b\w*(?:$all_words)\w*\b/i", '***', trim($value));
}

更新

他の回答やコメントを見ると、質問をきちんと見ていないようです。が配列でない場合$wordlistは、@fthiella の回答をそのまま使用できます。

于 2013-01-02T08:28:49.587 に答える
0

この方法で試してみてください

$_words = implode( '|', $wordlist );

return preg_replace( "/\b\w*{$_words}\w*\b/i", "***", trim( $value ) );

またはそれ以上

$_words = array();
foreach ( $wordlist as $word ) {
    $_words[] = '/\b\w*' . preg_quote( $word ) . '\w*\b/i';
}

return preg_replace( $_words, '***', trim( $value ) );

2 番目の方法では、予約文字が単語内に表示された場合に、正規表現の問題を回避できます。

于 2013-01-02T08:30:59.730 に答える