Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的Perl regex tr函数_Php_Regex_Perl_Tr - Fatal编程技术网

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网页上发布:)