字符串操作 preg_replace 或 str_replace

发布于 2024-09-08 09:02:44 字数 956 浏览 7 评论 0原文

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

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

没有给出期望的结果。例如我有一个字符串

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

我需要的是,我只想替换单词“the”。但由于“the”在“theory”、“thesis”和“them”中重复出现,所有以三个字母开头的字母也将被替换。然后输出变成 $var="hhh hhhory 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

I need to replace a word with another word. But

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

is not giving the desired result. For example i have a string

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

What i need is, i just want to replace the word "the". But since "the" is repeated in "theory" "thesis" and "them", all those starting three letters are also getting replaced. Then output becomes
$var="hhh hhhory of hhhm hhhsis";//wrong
But i need the output
$var="hhh theory of them thesis";//write
I am bad at explaining a question, plz excuse me...

Thanks in advance....


From what I (paxdiablo) can gather from the OP's comments, this is the code following modifications (still claimed not to work):

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

也只是曾经 2024-09-15 09:02:44

执行您想要的操作的正常方法是使用正则表达式替换单词边界:

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

或:

$var = preg_replace ('/\b'.preg_quote($linklabel[$k]).'\b/', $linklabelmod[$k], $var);

The normal way of doing what you want is to use a regular expression replace with word boundaries:

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

or:

$var = preg_replace ('/\b'.preg_quote($linklabel[$k]).'\b/', $linklabelmod[$k], $var);
十级心震 2024-09-15 09:02:44

如果你想使用 str_replace 函数,请插入空格 :)

php > $var = "他们的理论论文";

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

php >;回显 $var;

Insert white space :) if you want to use str_replace function

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

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

php > echo $var;

魔法少女 2024-09-15 09:02:44

好吧,我总是建议使用 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 文本以最大程度地减少错误数量

Well i would always advise in using str_replace over preg_replace but in this case you might have to.

<?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);

?>

Dont forget to preg_qoute the text to minimize the amount of errors

°如果伤别离去 2024-09-15 09:02:44
$var = "the theory of them thesis"; 
$linklabel[1] = "the"; 
$linklabelmod[1] = "hhh";

$var = str_replace( " " . $linklabel[1] . " ", 
                    " " . $linklabelmod[1] . " ", 
                    " " . $var . " ");
$var = trim($var);
$var = "the theory of them thesis"; 
$linklabel[1] = "the"; 
$linklabelmod[1] = "hhh";

$var = str_replace( " " . $linklabel[1] . " ", 
                    " " . $linklabelmod[1] . " ", 
                    " " . $var . " ");
$var = trim($var);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文