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

<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;


正在回答

3 回答

三目运算符的优先级要高于有些逻辑运算符,如果不加括号那么会先运算后边的三目,然后再和前边的逻辑运算符进行运算。输出的结果就会不同了

mdmjtz

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

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

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


1 回复 有任何疑惑可以回复我~
#1

慕姐3423952

但我怎么换成$1是运行不出来的呢.........
2019-05-15 回复 有任何疑惑可以回复我~
#2

慕桂英9545975 回复 慕姐3423952

你上面的 $p = '/\w+\.\w+/i' 没有加括号,所以没有子组,写成$p = '/(\w+\.\w+)/i'就有子组了,那么把$0换成$1也行
2019-05-16 回复 有任何疑惑可以回复我~
#3

慕桂英9545975 回复 慕桂英9545975

$0就是所有的结果,$1就是所有结果的第一个子组
2019-05-16 回复 有任何疑惑可以回复我~
#4

慕桂英9545975

举个例子 $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 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信