我有以下代码,我试图使用单词边界精确匹配特定单词,将它们替换为“审查”,然后重建文本,但由于某种原因,正则表达式正在捕获尾部斜杠。为了清楚起见,我已简化为以下测试用例
<?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 数组中的键存在。
有人可以解释我可能会出错的地方吗?
提前致谢