preg_replace_callback_array函数使用

PHP7中PCRE增加了一个新的函数,那就是preg_replace_callback_array。

在此之前,PCRE中就已经有了preg_replace_callback,那这两者之间又有什么共同点和区别

首先复习一下preg_replace_callback的函数定义。

mixed preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] )

其中,$pattern可以是string或array类型。

再来先看下方代码:

<?php
$subject = 'hello world!';
$replaced = preg_replace_callback([
    '#(hello)#',
    '#(world)#',
], function ($matches) {
    return strtoupper($matches[1]);
}, $subject);
echo $replaced;
// HELLO WORLD!

再看preg_replace_callback_array的函数定义:

mixed preg_replace_callback_array ( array $patterns_and_callbacks , mixed $subject [, int $limit = -1 [, int &$count ]] )

与preg_replace_callback对比,没有了 p a t t e r n 和 pattern和 patterncallback,而是将两个结合成了一个associative的数组。

再看看示例代码:

<?php
$subject = 'Hello World';
$replaced = preg_replace_callback_array([
    '#(Hello)#' => function ($matches) {
        return 'Good';
    },
    '#(World)#i' => function ($match) {
        return 'day';
    }
], $subject);
echo $replaced;
 
// OUTPUT
// Good day

可以看出,preg_replace_callback只能针对多个pattern的匹配模式作出同一种callback行为。当然,可以在callback中实现不同的控制分支(switch/if),而preg_replace_callback_array则是通过传递pattern=>callback的associative对应关系,实现一对一的callback操作,更具清晰化。

总结:

相同点:

1)都是通过PCRE模式进行匹配,并实现替换

2)参数和返回值也基本相同,如subject为数组时,返回值为数组;subject为字符串时,返回值为字符串

不同点:

1)preg_replace_callback的pattern参数可以为字符串或数字下标的PCRE模式数组;而preg_replace_callback_array的pattern只能为keyValue的数组;

2)preg_replace_callback的callback会对pattern参数中所有的模式作相同的操作;
preg_replace_callback_array的pattern因为定义了keyValue的方式,会使用相应的key对应的callback进行处理;

3)参数数量不同:preg_replace_callback为5个参数,preg_replace_callback_array为4个参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
preg_replace()函数是PHP中的一个函数,用于执行正则表达式的搜索和替换操作。它的定义是:mixed preg_replace(mixed $pattern, mixed $replacement, mixed $subject \[, int $limit = -1 \[, int &$count\]\])。\[2\] 该函数接受三个必需的参数:$pattern表示要搜索的正则表达式模式,$replacement表示要替换的内容,$subject表示要在其中进行搜索和替换的字符串。 在替换过程中,可以使用特殊的替换模式来引用匹配到的子字符串。例如,可以使用$1、$2等来引用正则表达式中的捕获组。\[3\] 需要注意的是,如果在$replacement参数中使用了/e修正符,那么PHP会将$replacement参数作为PHP代码来执行。因此,需要确保$replacement构成一个合法的PHP代码字符串,否则可能会导致语法解析错误。\[1\] 总结起来,preg_replace()函数是一个用于执行正则表达式搜索和替换的函数,可以根据指定的模式在字符串中进行搜索,并将匹配到的内容替换为指定的内容。 #### 引用[.reference_title] - *1* *2* [php代码审计之preg_replace函数](https://blog.csdn.net/giaogiao123/article/details/121217533)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [preg_replace()函数。该函数执行正则表达式的搜索和替换。](https://blog.csdn.net/autumn20080101/article/details/51346957)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值