0

次のコードでは、単語の境界を使用して特定の単語を正確に一致させ、それらを「検閲済み」に置き換えてからテキストを再構築しようとしていますが、何らかの理由で正規表現が末尾のスラッシュをキャッチしています。明確にするために、次のテストケースに単純化しました

<?php

$words = array('bad' => "censored");
$text = "bad bading testbadtest badder";
$newtext = "";

foreach( preg_split( "/(\[\/?(?:acronym|background|\*)(?:=.+?)?\]|(^|\W)bad(\W|$))/i", $text, null, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY ) as $section )
{
    if ( isset( $words[ $section ] )  )
    {
        $newtext .= $words[ $section ];
    }
    else
    {
        $newtext .= $section ;
    }
}

var_dump($newtext);

出口;

この例では、「bad」で一致することを期待していますが、testbadtest または badder ではありません。問題は、$words 配列のキーとして存在しない "悪い" (末尾のスペースに注意してください) が一致していることです。

誰かが私がどこで間違っているのか説明してもらえますか?

前もって感謝します

4

1 に答える 1