<em>$0</em>为什么中间不能换成$1或者是别的数字而只能是0才能正确输出呢? 而且为什么把<em>$0</em>这句去掉之后就不能正确运行了呢?

来源:3-7 正则表达式的搜索和替换

精致的猪猪女孩

2019-05-02 16:21

<?php

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

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

$p = '/\w+\.\w+/i';

$str = preg_replace($p, '<em>$0</em>',$str);


echo $str;


写回答 关注

2回答

  • 慕桂英9545975
    2019-05-15 16:33:00

    $0是指匹配到的所有结果,$1是指匹配到的所有结果的第一个子组。这里的第一个子组就是整个结果,所以换成$1也是可以的。

    把<em>$0</em>去掉不能正确运行,是因为这个课程的要求本来就是给这些文字加em标签(就是把文字变成斜体的html标签)。如果去掉了就变成把那些文字替换成空值,那就只能看见2个逗号了。


    慕桂英954...

    举个例子 $string = 'April 15 2014'; $pattern = '/(\w+) (\d+) (\d+)/i'; preg_match($pattern,$string, $matches); echo $matches[0].'<br>';//$0,显示的是April 15 2014 echo $matches[1].'<br>';,//$1,显示的是April echo $matches[2].'<br>';//$2,显示的是15 echo $matches[3];//$3,显示的是2014

    2019-05-16 15:14:00

    共 4 条回复 >

  • 慕尼黑4244925
    2019-05-03 01:27:23
    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。主要区别是加没加括号对其进行分组。

    希望对你有所帮助。


PHP进阶篇

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

181835 学习 · 2577 问题

查看课程

相似问题