我想用她的正则表达式替换她

时间:2017-10-16 11:02:55

标签: php regex

我使用下面的代码将她和她一起替换为她。

 $string = 'The quick he fox jumps over the lazy dog.';
  $patterns = array();
$patterns[0] = '/he/';
//$patterns[1] = '/brown/';
//$patterns[2] = '/fox/';
$replacements = array();
$replacements[2] = 'she';
//$replacements[1] = 'black';
//$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);

但它在执行后返回字符串

Tshe quick she fox jumps over tshe lazy dog.

所以问题是它还将“the”转换为“tshe”我只想替换单独的单词(喜欢他)而不是部分单词 (不喜欢)。

4 个答案:

答案 0 :(得分:4)

试试这个:这将只替换整个单词

如果$string包含UTF-8文本,则必须添加Unicode修饰符“u”,以便非拉丁字符不会被误解为字边界:

$string = 'The quick he fox jumps over the lazy dog.';

$replace = preg_replace('/\bhe\b/u', 'she', $string);

echo  $replace;

答案 1 :(得分:2)

您需要/\bshe\b/

<?php
$string = "The quick he-fox jumps over the lazy dog.";
echo preg_replace("/\bhe(-?)\b/u", "she$1", $string);
?>

/u修饰符用于unicode支持,以确保正确解释非Unicode字符。

Demo

这将匹配he foxhe-fox,并将其更改为所需的she foxshe-fox

解释

  • \b - 开始字边界。
  • he - 匹配字面词he
  • ( - 开始捕获组。
  • -? - 匹配零个或一个字面连字符。
  • \b - 结束字边界。

在替换中,"she$1&#34;将写出单词she$1将成为该组的捕获。如果有一个连字符,它将输出它,否则它不会。

答案 2 :(得分:0)

您需要添加空格:

$patterns[0] = '/[\s]he[\s]/';

您可以在此处测试正则表达式:

https://regex101.com/

答案 3 :(得分:-1)

你试过太空吗?比如$patterns[0] = '/ he /';

这是你的解决方案。