манипулирование строками preg_replace или str_replace - PullRequest
1 голос
/ 05 июля 2010

Мне нужно заменить слово другим словом.Но

$var= str_replace($linklabel[$k], $linklabelmod[$k], $var);

не дает желаемого результата.Например, у меня есть строка

$var="the theory of them thesis"; 
$linklabel[1]="the"; 
$linklabelmod[1]="hhh";

Что мне нужно, я просто хочу заменить слово «the».Но поскольку «теория» повторяется в «теории», «тезисе» и «их», все эти три начальные буквы также заменяются.Тогда вывод становится $ var = "hhh hhhory of hhhm hhhsis"; // неверно Но мне нужен вывод $ var = "тезис о них"; // пишу Яплохо объяснив вопрос, плз извините ...

Заранее спасибо ....


Из того, что я (paxdiablo) могу почерпнуть из комментариев ОП, этоКод следующих модификаций (все еще заявлено, что не работает):

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 ]

5 голосов
/ 05 июля 2010

Обычный способ сделать то, что вы хотите, это использовать регулярное выражение заменить на границы слов:

$var = preg_replace ('/\bthe\b/', 'hhh', $var);

или

$var = preg_replace ('/\b'.preg_quote($linklabel[$k]).'\b/', $linklabelmod[$k], $var);
3 голосов
/ 05 июля 2010

Вставьте пробел :), если вы хотите использовать функцию str_replace

php > $var = "the theory of them thesis";

php > $var = str_replace(array(" the ", "the "), 'hhh', $var);

php > echo $var;

3 голосов
/ 05 июля 2010

Ну, я бы всегда советовал использовать str_replace вместо preg_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, чтобы минимизировать количество ошибок

0 голосов
/ 05 июля 2010
$var = "the theory of them thesis"; 
$linklabel[1] = "the"; 
$linklabelmod[1] = "hhh";

$var = str_replace( " " . $linklabel[1] . " ", 
                    " " . $linklabelmod[1] . " ", 
                    " " . $var . " ");
$var = trim($var);
...