PHP中的Perl regex tr函数
我主要使用PHP中的Perl regex tr函数,php,regex,perl,tr,Php,Regex,Perl,Tr,我主要使用perl,它有一个有用的功能,可以将characterST更改为其他字符,即tr: $str =~ tr/[ÁÉÍÓÖŐÚÜŰ]/[AEIOOOUUU]/; 现在我需要将其实现到PHP,但我发现只有str\u replace函数会一个接一个地改变,如下所示: $str = str_replace('Á', 'A', $str); $str = str_replace('É', 'E', $str); // etc... PHP中是否有类似Perl的一行解决方案?在PHP中,使用以
perl
,它有一个有用的功能,可以将characterST更改为其他字符,即tr
:
$str =~ tr/[ÁÉÍÓÖŐÚÜŰ]/[AEIOOOUUU]/;
现在我需要将其实现到PHP
,但我发现只有str\u replace
函数会一个接一个地改变,如下所示:
$str = str_replace('Á', 'A', $str);
$str = str_replace('É', 'E', $str);
// etc...
PHP中是否有类似Perl的一行解决方案?在PHP中,使用以下方法翻译字符:
$str = 'ÁÉÍ foo ÖŐÚÜŰ bar';
echo strtr($str, array('Á' => 'A', 'É' => 'E', 'Í' => 'I', 'Ó' => 'O',
'Ö' => 'O', 'Ő' => 'O', 'Ú' => 'U', 'Ü' => 'U', 'Ű' => 'U'));
//=> AEI foo OOUUU bar
您可以使用带有数组的
preg\u replace
作为搜索和替换参数。str\u replace
接受数组too@Andrew:是的,没错。NETDJW:既然你接受了阿努巴娃的建议,请考虑使用<代码> StruxPers[/Case>解决方案(因为我没有测试)要比<代码> STRTR 更有效地使用长文本和大数组。Perl的代码> Tr///< /Cord>运算符不接受正则表达式模式,只接受字符列表。您的示例恰好起作用,因为翻译后的字符在列表中与其对应的原始字符处于相同的位置。但它也会将[
转换为[
和]
转换为]
,因此括号是多余的仅供参考:对于长文本和大数组,要比strtrtr
更有效。这是长文本的情况吗?OP正在用perl调用tr
,它会逐字翻译。顺便说一句,你引用的评论发表了10年ago@stribizhev:关于性能,您应该看看这个小测试:(请记住,str\u replace
在strtrtr
或iconv
同时对所有项目只搜索一次字符串时,搜索每个数组项的所有字符串)。可能在较旧的PHP版本中,strtrtr
速度较慢。我认为您应该在该PHP网页上发布:)