实际上这个问题不应该那么难,但是我在stackoverflow中搜索它但是找不到任何可以按照我想要或我能理解的方式工作。这就是我要求的: 图像有一个文字像: “我今天温度很高” 我想用“al”替换字符串“hi”,但我不希望将“high”这个词替换为“algh”。我知道我需要使用preg_replace函数,但我无法使其工作。
ps:如果你也可以用数组展示你的解决方案,我会更满意。就像有一个要更改的字符串数组,并且有一个字符串数组要更改为。
感谢您的帮助,谢谢:)
答案 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)
答案 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"