<?php
$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string);
?>
以上例程会输出:
April1,2003
请问这句$replacement = '${1}1,$3';是什么意思
第1个回答 2013-02-06
${1}代表 '/(\w+) (\d+), (\d+)/i'中第1个括号里的内容
$3 代表 '/(\w+) (\d+), (\d+)/i'中第3个括号里的内容
${1} 因为后面跟这个很难区分($11)所以加个大括号包住
$3 代表 '/(\w+) (\d+), (\d+)/i'中第3个括号里的内容
${1} 因为后面跟这个很难区分($11)所以加个大括号包住
第2个回答 推荐于2018-04-12
preg_replace函数用法:搜索$string中符合正则规则$pattern的部分,以$replacement替换,返回替换后的内容。
在$replacement中,可以用$1,$2,$3分别引用$pattern中从左到右第一、二、三个括号中匹配的内容,为了避免$11被解析为引用第11个而不是第1个括号里的内容,所以要写成${1}1。
具体匹配分析:
(\w+)匹配April,空格匹配空格,(\d+)匹配15,逗号匹配逗号,(\d+)匹配2003,加起来正好就是$string的值,替换后就是 April(第一个括号匹配的内容)1,2003(第三个括号匹配的内容)。
最后建议你看下PHP手册中此函数的详细说明和正则表达式中反向引用的概念。本回答被提问者和网友采纳
在$replacement中,可以用$1,$2,$3分别引用$pattern中从左到右第一、二、三个括号中匹配的内容,为了避免$11被解析为引用第11个而不是第1个括号里的内容,所以要写成${1}1。
具体匹配分析:
(\w+)匹配April,空格匹配空格,(\d+)匹配15,逗号匹配逗号,(\d+)匹配2003,加起来正好就是$string的值,替换后就是 April(第一个括号匹配的内容)1,2003(第三个括号匹配的内容)。
最后建议你看下PHP手册中此函数的详细说明和正则表达式中反向引用的概念。本回答被提问者和网友采纳