用 Str_Replace 替换多个单词

5
我希望你能够帮我将多个同义词替换为一个特定的词语。
<?p

$a = array(
'truck',
'vehicle',
'seddan',
'coupe',
'Toyota',
);
$b = array(
'car',
'car',
'car',
'car',
'Lexus',
);
$str = '

Honda is a truck. 
Toyota is a vehicle. 
Nissan is a sedan. 
Scion is a coupe.

';
echo str_replace($a,$b,$str);
?>

结果:本田是一辆车。雷克萨斯是一辆车。日产是一辆车。赛恩是一辆车。

有人可以向我展示用单词“汽车”替换“交通工具,卡车,两门轿车,四门轿车”的简洁方法吗?谢谢。

5个回答

9
$a = array( 'truck', 'vehicle', 'sedan', 'coupe' );
$str = 'Honda is a truck. Toyota is a vehicle. Nissan is a sedan. Scion is a coupe.';
echo str_replace($a,'car',str_replace('Toyota','Lexus',$str));

似乎没有起作用。它没有将"truck"替换为"car"......结果变成了"Honda是一辆车。Lexus是一个。Nissan是一辆轿车。Scion是一个。" - Jim B Bob
更新了我的回答 - 第二个参数必须是一个字符串,以允许多个替换。对此很抱歉。 - Eugen Rieck
请问您能否向我展示如何纠正这个修改过的代码版本。http://codepad.org/DhPgwPCR 谢谢! - Jim B Bob

6
你应该使用 strtr 函数。
echo strtr($str,array_combine($a,$b)); 

或者将$a$b组合成一个数组

$ab = array('truck' => 'car','vehicle' => 'car','sedan' => 'var','coupe' => 'var','Toyota' => 'Lexus');
echo strtr($str, $ab);

输出

Honda is a car. 
Lexus is a car. 
Nissan is a car. 
Scion is a car.

2

我找到了一个非常简单的解决方案,可以替换字符串中的多个单词:

<?php
 $str="    Honda is a truck. 
Toyota is a vehicle. 
Nissan is a sedan. 
Scion is a coupe.";


$pattern=array();
$pattern[0]="truck";
$pattern[1]="vehicle";
$pattern[2]="sedan";
$pattern[3]="coupe";



$replacement=array();
$replacement[0]="car";
$replacement[1]="car";
$replacement[2]="car";
$replacement[3]="car";



echo str_replace($pattern,$replacement,$str);?> 

输出:

  Honda is a car. 
Toyota is a car. 
Nissan is a car. 
Scion is a car

使用这个脚本,您可以替换字符串中的任意数量的单词:

只需将要替换的单词放入模式数组中,例如:

     $pattern[0]="/replaceme/"; 

将要替换的字符放入替换数组中,例如:

      $replacement[0]="new_word"; 

愉快地编码吧!


这个例子也适用于 preg_replace() 函数,如果你想使用 preg_replace 而不是 str_replace,请用分隔符分隔模式字符串,例如:pattern[0]="/truck/"; - Amit Verma

1

类似于

$a = array( 'truck', 'vehicle', 'seddan', 'coupe' ); 

$str = 'Honda is a truck. Toyota is a vehicle. Nissan is a sedan. Scion is a coupe.'; 

echo str_replace($a,'car',$str); 

应该可以工作。

http://codepad.org/1LhtcOSR

编辑:

类似这样的内容应该会产生预期的结果:http://pastebin.com/xGzYiCk3

$text = '{test|test2|test3} some other stuff {some1|some2|some3}';

输出:

测试3 其他一些东西 一些1
测试2 其他一些东西 一些2
测试3 其他一些东西 一些3
测试3 其他一些东西 一些1

嗨,我尝试给您点赞,但系统不允许我这么做。我在这里还是新手,请问您能否帮我纠正一下这段代码呢?链接是:http://codepad.org/DhPgwPCR,谢谢! - Jim B Bob
你需要提供更详细的解释,说明你想要实现什么,这样我才能更好地帮助你 :) - Johnathon Malizia
好的,我使用这个网站来“旋转文章”,随机选择不同的同义词,例如在文章中每次出现时随机使用“故事或故事情节”。http://ezarticlelink.com/articlespinner/free.php 这就是我正在使用的网站。尝试输入“The {story|tale|storyline} of the book is really nice.”,你就可以看到我所说的旋转文章的意思了。但是使用修改后的代码它无法正确输出。 - Jim B Bob
为了获得这种功能,您需要编写一个解析器,使用其中一个随机值来解析文章(文本)以获取指定格式{story|storyline|etc...}。在这种情况下,简单的str_replace无法起作用。 - Johnathon Malizia
网站进行随机化处理。问题在于脚本输出并替换该输出值,例如"{story|{story|tale|{story|tale|storyline}}|{story|tale|storyline}}",而不是像"{story|tale|storyline}"那样只执行一次。 - Jim B Bob
谢谢您的回复,那段代码对我来说有点高级了,所以我不确定如何修改它,哈哈,您能告诉我如何使用它来获得实际结果,例如“这本书的故事真的很好。故事以一个男孩开始。故事逐渐展开…”? - Jim B Bob

1

要将短语替换为其他短语(同时进行多个替换),您可以将数组作为参数传递给str_replace()函数。

// Provides: You should eat pizza, beer, and ice cream every day
$phrase  = "You should eat fruits, vegetables, and fiber every day.";
$healthy = ["fruits", "vegetables", "fiber"];
$yummy   = ["pizza", "beer", "ice cream"];

$newPhrase = str_replace($healthy, $yummy, $phrase);

谢谢,我不知道这是可能的。 - SMPLYJR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接