PHP 用单个正则表达式模式替换所有实例

标签 php regex

我有一个正则表达式,我想以最有效的方式用相应的替换数组替换匹配数组中的每个匹配项。

例如,我有:

$string = '~~hello~~ there, how ~~are~~ ~~you~~?';

$pattern = '/~~(.*?)~~/';

$replacements = array();
$replacements[0] = 'hi';
$replacements[1] = 'am';
$replacements[2] = 'i';

我想把 $string 变成:

hi there, how am i?

最初我希望它会像这样简单:

$string = preg_replace($pattern, $replacements, $string);

但是好像不行。所以第一个问题是:如果 $replacements 是一个数组,那么 $string 是否也必须是一个数组?

现在,我可以想出(看似)低效的方法来执行此操作,例如计算匹配项的数量并制作一个数组,其中填充适当数量的相同正则表达式。但这将我们引向第二个问题:是否有更有效的方法? PHP 专家,您会怎么做?

最佳答案

你可以在这里使用一个简单的评估技巧:

print preg_replace('/~~(\w+)~~/e', 'array_shift($replacements)', $st);

array_shift只会从您的替换数组中获取第一个条目。

不过最好还是使用 map ("hello"=> "hi")。

关于PHP 用单个正则表达式模式替换所有实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13427253/

相关文章:

php - $result->num_rows 始终返回 0

python - 在正则表达式中寻找 "|"之间的句子

java - 字符串上的正则表达式,用于匹配和匹配,无论顺序如何

python - 在字符串中找到特定模式,为什么其他匹配?

php - 这是进行表单验证的良好设计吗?

php - 我应该为 password_hash() 使用什么列字符编码?

php - 使用 PHP 存储和显示来自 MySQL 的图像

php - mysql中的过程中的多个查询

c - 检测模式末尾的字符串

php - 在 PHP 中替换通配符