0

コンテンツの完全なテキストが正規表現を介してphpのキーワードのリストと一致するスクリーニングロジックを開発しています。単語を適切に一致させて太字にする次のコードを使用しています。

$pattern = "/mango|apple|banana/";
$text = "i like banana and apple alot";
$replacement = "<strong>$0</strong>";
echo preg_replace($pattern, $replacement, $text);

このコードは適切に一致し、一致した単語を強いようなもので囲みます

i like <strong>banana</strong> and <strong>apple</strong> alot.

しかし、バナナを次のように置き換えたい

b****a and apple as a****e 

太字にする代わりに。

どうすればそれが可能になるのか、誰でも助けてくれますか。

4

2 に答える 2

2

preg_replace_callbackの代わりに使用してみることができますpreg_replace

preg_replace_callback($pattern, function($matches){
    $str = $matches[0];
    $len = strlen($str);
    $stars = str_repeat('*', $len-2);
    return $str[0].$stars.$str[$len-1];
}, $text);

動的な数の星を作成するように更新

于 2013-01-30T17:52:19.420 に答える
1

パターンが固定されている場合は、次のpreg_replaceように配列を渡すことができます。

$patterns = array(
    '/mango/',
    '/apple/',
    '/banana/'
}
$replacements = array(
    'm***o',
    'a***e',
    'b****a'
)
echo preg_replace($patterns, $replacements, $text);

これは、次のように置き換えたいキーワードの任意の配列にも適用できます。

$keywords; // array populated with key words
$patterns = array();
$replacements = array();
array_walk($keywords, function($value, $key) {
    $patterns[] = '/' . $value . '/';
    $replacements[] = strpad($value[0], strlen($value) - 1, '*') . $value[strlen($value) - 1];
}
echo preg_replace($patterns, $replacements, $text);
于 2013-01-30T17:55:29.887 に答える