字符串操作preg_replace或str_replace

时间:2010-07-05 12:05:58

标签: php string pcre

我需要用另一个单词替换一个单词。但是

$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

4 个答案:

答案 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);