您好,登錄后才能下訂單哦!
小編給大家分享一下如何解決php中preg_replace_callback回調(diào)函數(shù)傳參問題,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
preg_replace_callback
這個函數(shù)的作用是執(zhí)行一個正則表達式搜索并且使用一個回調(diào)進行替換
preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed
參數(shù)說明
pattern
要搜索的模式,可以是字符串或一個字符串數(shù)組。
callback
一個回調(diào)函數(shù),在每次需要替換時調(diào)用,調(diào)用時函數(shù)得到的參數(shù)是從 subject 中匹配到的結(jié)果?;卣{(diào)函數(shù)返回真正參與替換的字符串。這是該回調(diào)函數(shù)的簽名:
handler ( array $matches ) : string
經(jīng)常會需要 callback 函數(shù)而僅用于 preg_replace_callback() 一個地方的調(diào)用。在這種情況下,你可以使用 匿名函數(shù) 來定義一個匿名函數(shù)作為 preg_replace_callback() 調(diào)用時的回調(diào)。 這樣做你可以保留所有調(diào)用信息在同一個位置并且不會因為一個不在任何其他地方使用的回調(diào)函數(shù)名稱而污染函數(shù)名稱空間。
Example #1 preg_replace_callback() 和 匿名函數(shù)
<?php /* 一個unix樣式的命令行過濾器,用于將段落開始部分的大寫字母轉(zhuǎn)換為小寫。 */ $fp = fopen("php://stdin", "r") or die("can't read stdin"); while (!feof($fp)) { $line = fgets($fp); $line = preg_replace_callback( '|<p>\s*\w|', function ($matches) { return strtolower($matches[0]); }, $line ); echo $line; } fclose($fp); ?>
subject
要搜索替換的目標字符串或字符串數(shù)組。
limit
對于每個模式用于每個 subject 字符串的最大可替換次數(shù)。 默認是 -1(無限制)。
count
如果指定,這個變量將被填充為替換執(zhí)行的次數(shù)。
如何傳參
默認情況下,這個回調(diào)函數(shù)只會接收$matches這個匹配參數(shù),如果想要傳遞更多的參數(shù),我們可以采用迂回戰(zhàn)術(shù),正所謂條條大路通羅馬,我們只要能在匿名函數(shù)中訪問到需要傳遞的參數(shù)就行。于是我們有兩個辦法。
1.使用全局變量
$param1 = "test"; preg_replace_callback($pregRule, function ($match) { global $param1; return $match[1] . $param1 . $match[3]; }
2.使用面向?qū)ο蠹虞d類
class Scrapy{ private $param1 = "test"; public function info(){ preg_replace_callback($pregRule, function ($match) { return $match[1] . $this->param1 . $match[3]; } } }
通過上面的兩種方法我們就可以在回調(diào)函數(shù)中調(diào)用我們想要傳入的參數(shù)。
看完了這篇文章,相信你對如何解決php中preg_replace_callback回調(diào)函數(shù)傳參問題有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。