<em>$0</em>为什么中间不能换成$1或者是别的数字而只能是0才能正确输出呢? 而且为什么把<em>$0</em>这句去掉之后就不能正确运行了呢?
<?php
$str = '主要有以下几个文件:index.php, style.css, common.js';
//将目标字符串$str中的文件名替换后增加em标签
$p = '/\w+\.\w+/i';
$str = preg_replace($p, '<em>$0</em>',$str);
echo $str;
<?php
$str = '主要有以下几个文件:index.php, style.css, common.js';
//将目标字符串$str中的文件名替换后增加em标签
$p = '/\w+\.\w+/i';
$str = preg_replace($p, '<em>$0</em>',$str);
echo $str;
2019-05-02
1 | $p = '/\w+\.\w+/i' ; |
如果你的正则式是这样的话是没有$1的,
但如果你正则式改为这样
1 | $p = '/(\w+)\.(\w+)/i' ; |
那你使用$1是可以通过的,显示结果为: 主要有以下几个文件:index, style, common
会将文件名输出,而如果你使用$2显示结果则为:主要有以下几个文件:php, css, js
其实正如楼上所说,$0代表完整的模式匹配文本,即$p所匹配的的完整字符串,即index.php, style.css, common.js这些,而你加了如上的括号后,你可以认为是将其匹配结果分组了,$1代表第一个括号匹配的字串,即index, style, common;$2代表第二个括号匹配的字串,即php, css, js。主要区别是加没加括号对其进行分组。
希望对你有所帮助。
举报