regex 如何在PHP中替换字符串中的单个单词?

2ledvvac  于 2023-05-23  发布在  PHP
关注(0)|答案(3)|浏览(108)

我需要用一个数组给出的替代词来替换单词

$words = array(
'one' => 1,
'two' => 2,
'three' => 3
);

$str = 'One: This is one and two and someone three.';

$result = str_ireplace(array_keys($words), array_values($words), $str);

但是该方法将someone改变为some1。我需要替换个别单词。

nnsrf1az

nnsrf1az1#

您可以在正则表达式中使用word boundries来要求单词匹配。
类似于:

\bone\b

会这么做preg_replacei modifier是你想在PHP中使用的。
正则表达式演示:https://regex101.com/r/GUxTWB/1
PHP用法:

$words = array(
'/\bone\b/i' => 1,
'/\btwo\b/i' => 2,
'/\bthree\b/i' => 3
);
$str = 'One: This is one and two and someone three.';
echo preg_replace(array_keys($words), array_values($words), $str);

PHP演示:https://eval.in/667239
输出:
1:这是1和2和某人3。

9jyewag0

9jyewag02#

你可以在preg_replace中使用\B作为单词边界:

foreach ($words as $k=>$v) {
  $str = preg_replace("/\b$k\b/i", $v, $str);
}
kiayqfof

kiayqfof3#

这个函数将帮助你替换PHP中的一些单词而不是字符。它使用pre-replace()函数

<?PHP
      function removePrepositions($text){
            
            $propositions=array('/\bthe\b/i','/\bor\b/i', '/\ba\b/i', '/\band\b/i', '/\babout\b/i', '/\babove\b/i'); 
        
            if( count($propositions) > 0 ) {
                foreach($propositions as $exceptionPhrase) {
                    $text = preg_replace($exceptionPhrase, '', trim($text));

                }
            $retval = trim($text);

            }
        return $retval;
    }
            
?>

相关问题