Php 为什么preg_replace()将字符替换两次?
我试着用preg_replace来改变一堆单词。我之所以使用preg_replace而不是strpos,是因为它可以搜索我要替换的同一角色的多个场合。例如:Php 为什么preg_replace()将字符替换两次?,php,Php,我试着用preg_replace来改变一堆单词。我之所以使用preg_replace而不是strpos,是因为它可以搜索我要替换的同一角色的多个场合。例如: $word = "abadi"; $patterns = array("/a/","/b/","/d/","/i/","/I/"); $replacements = array(" A"," B"," D"," I"," IY"); $word = preg_replace($patterns, $replacements, $word);
$word = "abadi";
$patterns = array("/a/","/b/","/d/","/i/","/I/");
$replacements = array(" A"," B"," D"," I"," IY");
$word = preg_replace($patterns, $replacements, $word);
var_dump ($word); // string ' A B A D IY' (length=12)
我想所有的字符只改变一次。所以一旦小写的i被改成i,就不要再改成IY。有可能吗?PHP的内置函数strtr更适合这种情况。使用此函数替换子字符串后,将不会再次搜索其新值
$translations = ['a' => 'A', 'b' => 'B', 'd' => 'D', 'i' => 'I', 'I' => 'IY' ];
$newString = strtr('abadi', $translations);
见定义:
string strtr ( string $str , array $replace_pairs )
如果给定两个参数,则第二个参数应为数组'from'=>'to',..形式的数组。。。。返回值是一个字符串,其中所有出现的数组键都已替换为相应的值。最长的钥匙将首先试用。替换子字符串后,将不再搜索其新值
$translations = ['a' => 'A', 'b' => 'B', 'd' => 'D', 'i' => 'I', 'I' => 'IY' ];
$newString = strtr('abadi', $translations);
<> PrTo的更多细节,请参阅.
您可能需要考虑模式和替换数组的顺序,在更新的字符串上顺序替换单词,这样可能会有帮助:
$word = "abadi";
$patterns = array("/I/", "/a/","/b/","/d/","/i/");
$replacements = array(" IY", " A"," B"," D"," I");
$word = preg_replace($patterns, $replacements, $word);
var_dump ($word);
问题是,大约20万个音素单词的$word可能包含多个小写、大写、标点符号、符号和数字。但我会努力的,谢谢你!不幸的是,它不起作用,仍然得到同样的东西