我希望在同义词上相互替换或反向替换。我必须举个例子来告诉你:
$string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';
$find = array('/ipsum/', '/amet/');
$replace = array('amet', 'ipsum');
$output = preg_replace($find, $replace, $string);
Lorem ipsum dolor坐ipsum,consectetur adipiscing elit
Lorem amet dolor坐ipsum,consectetur adipiscing elit
所以我想将所有ipsum
更改为amet
,将amet
更改为lorem
。这两个词“ipsum”和“amet”只是样本。我有成千上万的同义词。
就像你看到的那样,我尝试了preg_replace
功能但是做得很好。
答案 0 :(得分:3)
使用strtr
:
$string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';
$find = array('ipsum', 'amet');
$replace = array('amet', 'ipsum');
$trans = array_combine($find, $replace);
$result = strtr($string, $trans);
与str_replace
的主要区别在于,当str_replace
(或preg_replace
)为每个项目解析一次时,字符串只被解析一次。
对于您的示例不是很有趣,但您可以使用preg_replace_callback
:
$trans = ['ipsum' => 'amet', 'amet'=>'ipsum'];
$result = preg_replace_callback('~amet|ipsum~', function ($m) use ($trans) {
return $trans[$m[0]]; }, $string);
如果您希望使用str_replace
或preg_replace
达到相同的效果,则需要使用占位符:
$find = ['ipsum', 'amet', '###placeholder###'];
$replace = ['###placeholder###', 'ipsum', 'amet'];
$result = str_replace($find, $replace, $string);
答案 1 :(得分:0)
我会像这样叫preg_replace_callback()
$string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';
$reverse = preg_replace_callback('/\b(ipsum|amet)\b/', function($matches) {
return $matches[0] == 'ipsum' ? 'amet' : 'ipsum';
}, $string);
//Lorem amet dolor sit ipsum, consectetur adipiscing elit
如果您只想匹配确切的单词,请使用单词边界(
\b
)。