<?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>即可。