为了账号安全,请及时绑定邮箱和手机立即绑定
<?php

$str = '主要有以下几个文件:index.php, style.css, common.js';

//将目标字符串$str中的文件名替换后增加em标签

$pattern='/\w+.\w+/';

$replacement='<em>$0</em>';

preg_match_all($pattern,$str,$matches);

print_r($matches);

echo preg_replace($pattern,$replacement,$str);

这里,我们首先用preg_match_all来看一下,使用\w+.\w+有三个匹配,那么我们的$matches[0]数组也就应该是一个长度为3的数组,而print_r可以看到的确如此。

什么是matches[0]呢?matches是preg_match_all函数的所有匹配,它的存储方式是:将整个正则表达式匹配的部分存储于索引为0的数组中,而正则表达式中的每个括号中的匹配存储于索引依次增大的数组中,既matches[1]为第一个括号的匹配,matches[2]为第二个括号的匹配。我们可以试一下:

<?php

$str = '主要有以下几个文件:index.php, style.css, common.js';

//将目标字符串$str中的文件名替换后增加em标签

$pattern='/(\w+).\w+/';

preg_match_all($pattern,$str,$matches);

print_r($matches);

可以看到matches[1]此时就是第一个括号的匹配,而matches[0]则是整个正则表达式的匹配。当我们使用$0,$1来replace字符串时,$0,$1与matches[0],matches[1]事实上是同样的,既$0表示与整个正则表达式匹配的部分,而$1表示与第一个括号内匹配的部分。所以$0是我们找到的*.*形势的文件名,只要在$0的左右添加强调标记<em>即可。

正在回答

2 回答

楼主真令人佩服!

0 回复 有任何疑惑可以回复我~

什么第一个括号 你的图呢?说的是哪里的第一个括号呢?是输出来的数组?

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
PHP进阶篇
  • 参与学习       181828    人
  • 解答问题       2577    个

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

进入课程
意见反馈 帮助中心 APP下载
官方微信