如何在php中用对应的多个字符替换多个字符?

5
我希望使用PHP中的preg_replace函数将字符串中的多个字符替换为其他字符,例如将<替换为a,>替换为b,!替换为c,$替换为d等。在一行代码中实现这个目标是否可行?还是应该先将字符串拆分,创建数组,然后再进行替换操作?
您可以使用 preg_replace 函数来实现此目标,并且可以在一行代码中完成。具体来说,您可以使用正则表达式来匹配要替换的字符,并使用其它字符进行替换。以下是一个示例代码: $newString = preg_replace("/[<>!$]/", "abcde", $oldString);
在上面的代码中,正则表达式 "/[<>!$]/" 可以匹配 <、>、! 和 $ 这几个字符。第二个参数 “abcde” 是要替换成的字符。最后一个参数 $oldString 是原始字符串。这样就可以将所有匹配到的字符替换为指定的字符了。
不需要拆分字符串或创建数组。

什么?我没有明白你实际想要什么。 - Realitätsverlust
为什么不使用 str_replace:http://php.net/str_replace - Mario Radomanana
4个回答

13

为什么要使用正则表达式来实现这个功能?直接使用str_replace更快。

$replace = str_replace(array('<', '>', '!'), array('a', 'b', 'c'), $text);

8
您可以使用简单的替换,在您的情况下,正则表达式可能会过度。例如:
$result = strtr($data, [
  '<' => 'a',
  '>' => 'b',
  '!' => 'c',
  //e t.c.
]);

另一个选择是使用str_replace(),但我认为关联数组看起来更易读。


1
使用 strtr,它专门用于这种字符转换:
<?php
$string = '<<!!';
echo strtr($string, '<>!$', 'abcd');
// Output: aacc

-1

这是我会做的。

$string = '<>!$';

$string = str_replace('<', 'a', $string);
$string = str_replace('>', 'b', $string);
$string = str_replace('!', 'c', $string);
$string = str_replace('$', 'd', $string);

echo $string; // abcd

@Philipp的答案更好 :) - Jacob Raccuia
抱歉大家。似乎我没有解释清楚情况。我从 $_POST 接收一个字符串,我想在某些地方进行调整,例如将 '<' 转换为 'ab','>' 转换为 'cd','!' 转换为 'ef',':' 转换为 'gh' 等等。我的同事告诉我可以使用 preg_replace 中的数组来实现这个目的。有人之前尝试过吗? - Dranzer
@Dranzer,无论你如何接收字符串都没关系。使用preg_replace是浪费时间的,因为它需要更长的时间。除非这就像一个“任务”,你需要使用正则表达式,否则使用上述解决方案之一将更适合你的需求。试试吧! - Jacob Raccuia

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