PHP Word替换问题

时间:2017-09-11 02:08:38

标签: php

实际上这个问题不应该那么难,但是我在stackoverflow中搜索它但是找不到任何可以按照我想要或我能理解的方式工作。这就是我要求的: 图像有一个文字像: “我今天温度很高” 我想用“al”替换字符串“hi”,但我不希望将“high”这个词替换为“algh”。我知道我需要使用preg_replace函数,但我无法使其工作。

ps:如果你也可以用数组展示你的解决方案,我会更满意。就像有一个要更改的字符串数组,并且有一个字符串数组要更改为。

感谢您的帮助,谢谢:)

3 个答案:

答案 0 :(得分:1)

您可以将正则表达式与\ b一起使用以使其正常工作。

$string = 'hi today the temperature is high';
$pattern = '/\bhi\b/';
$replacement = 'al';
echo preg_replace($pattern, $replacement, $string);
  

\ b 在字边界处断言位置(^ \ w | \ w $ | \ W \ w | \ w \ W)

https://regex101.com/r/WdQTMp/2

答案 1 :(得分:-1)

我建议对非空格字符\S使用 negative lookahead

这导致简单的正则表达式hi(?!\S)

<?php

$string = "hi today the temperature is high";
$string2 = preg_replace('/hi(?!\S)/', 'al', $string);
echo $string2; // "al today the temperature is high";

可以看到 here

请注意,这只会涵盖以<{1}}开始的字符串。要排除在hi之前包含文字的字符串(例如hi,您还需要负面的背后隐藏

sushi)

可以看到 here

希望这有帮助! :)

答案 2 :(得分:-2)

For example: 

<?php 
    $arrFrom = array("1","2","3","B"); 
    $arrTo = array("A","B","C","D"); 
    $word = "ZBB2"; 
    echo str_replace($arrFrom, $arrTo, $word); 
?> 

I would expect as result: "ZDDB" 
However, this return: "ZDDD" 
(Because B = D according to our array) 

To make this work, use "strtr" instead: 

<?php 
    $arr = array("1" => "A","2" => "B","3" => "C","B" => "D"); 
    $word = "ZBB2"; 
    echo strtr($word,$arr); 
?> 

This returns: "ZDDB"