我需要用另一个单词替换一个单词。但是
$var= str_replace($linklabel[$k], $linklabelmod[$k], $var);
没有给出所需的结果。例如,我有一个字符串
$var="the theory of them thesis";
$linklabel[1]="the";
$linklabelmod[1]="hhh";
我需要的是,我只想替换“the”这个词。但由于“the”在“理论”,“论文”和“他们”中重复出现,所有开始三个字母的人也都会被取代。然后输出变成 $ var =“hhh hhh of hhhm hhhsis”; //错误 但我需要输出 $ var =“hhh他们的理论论文”; //写 我不好解释一个问题,请原谅我......
提前致谢....
从我(paxdiablo)可以从OP的评论中收集到的内容,这是修改后的代码(仍声称不起作用):
foreach($xpath->query('//a') as $element) {
$linklabel[] = $element->textContent;
$link[] = $element->getAttribute("href");
$i=$i+1;
}
for($k=0;$k<$i;$k++) {
$linklabelmod[$k] = str_replace($linklabel[$k], $linklabel[$k]."[$k]", $linklabel[$k]);
$var = preg_replace ('/\b'.preg_quote($linklabel[$k]).'\b/', $linklabelmod[$k], $var);
}
print $var; //printing web page
答案 0 :(得分:5)
正常的做法是使用正则表达式替换单词边界:
$var = preg_replace ('/\bthe\b/', 'hhh', $var);
或:
$var = preg_replace ('/\b'.preg_quote($linklabel[$k]).'\b/', $linklabelmod[$k], $var);
答案 1 :(得分:3)
我总是建议在preg_replace上使用str_replace,但在这种情况下你可能不得不这样做。
<?php
$k = 1;
$var="the theory of them thesis";
$linklabel[1]="the";
$linklabelmod[1]="hhh";
$var = preg_replace('/\b'.preg_quote($linklabel[$k]).'\b/i',$linklabelmod[$k], $var);
?>
不要忘记preg_qoute文本以尽量减少错误数量
答案 2 :(得分:3)
如果要使用str_replace函数
,请插入空格:) php > $var = "the theory of them thesis";
php > $var = str_replace(array(" the ", "the "), 'hhh', $var);
php > echo $var;
答案 3 :(得分:-2)
$var = "the theory of them thesis";
$linklabel[1] = "the";
$linklabelmod[1] = "hhh";
$var = str_replace( " " . $linklabel[1] . " ",
" " . $linklabelmod[1] . " ",
" " . $var . " ");
$var = trim($var);