preg_replace()这个函数有大神指导下吗

public function setBodyAttribute($body)
{
$this->attributes[‘body’] = preg_replace(‘/@([\w-]+)/‘,’$0‘,$body);
}
有没有大神指导下,这里的$1 ,$0,什么鬼?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 4
<?php
$string = 'google 123, 456';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '$0 - $1 - $2 - $3';
echo preg_replace($pattern, $replacement, $string);
?>

输出:

google 123, 456 - google - 123 - 456 

每个这样的引用将被匹配到的第n个捕获子组捕获到的文本替换。 n可以是0-99,\0和$0代表完整的模式匹配文本,也就是整串字符串

3年前 评论
zmxyzmxy1234 (作者) 3年前
zmxyzmxy1234 (作者) 3年前
sargerase (楼主) 3年前

@sargerase 这里的 $0 - $1 - $2 - $3,可以理解为该函数使用正则表达式匹配所得的结果。

3年前 评论

你好@hello-world,吃饭了吗?

$0 => @hello-world

$1 => hello-world

3年前 评论

$1, $2$n 在正则表达式中,replaces 是对括号中包含的匹配项的引用。 $0将是整个匹配,$1是第一个带括号的捕获,$2是第二个带括号的捕获,这样依此类推。

<?php
function  replace(string $str)
{
    // str => 18596854156@163.com
    return preg_replace('/(.*)@(\d+).([a-z]+)/', '$1-$2-$3', $str); 
    // output => 18596954156-163-com
}

针对上面的例子:

  • $0 是 $str
  • $1 是 (.*)
  • $2 是 (\d+)
  • $3 是 ([a-z]+)

具体参阅 docs,特别是该函数的 replace 参数

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!