亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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


正在回答

2 回答

$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條回復
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。主要區別是加沒加括號對其進行分組。

希望對你有所幫助。


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

舉報

0/150
提交
取消

<em>$0</em>為什么中間不能換成$1或者是別的數字而只能是0才能正確輸出呢? 而且為什么把<em>$0</em>這句去掉之后就不能正確運行了呢?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號