2016-09-22 69 views
2

有沒有一種方法在preg_replace()preg_replace_callback()只替換一個反向引用?例如,我有這個正則表達式:/(\.popup)([\s\.{])/和這個字符串.popup .popup-option。將生成的反向引用如下:$0 = .popup\s,$1 = .popup,$2 = \s。我想用另一個字符串替換$1。我如何設法做到這一點?PHP的正則表達式 - 替換一個反向引用

謝謝。

回答

3

您可以使用preg_replace_callback這樣的:

$s = '.popup .popup-option'; // original string 

echo preg_replace_callback('/(\.popup)([\s\.{])/', function ($m) { 
    return 'foo' . $m[2]; }, $s); 
//=> foo .popup-option 

在回調,我們正在返回與$m[2]因此只得到$m[1]更換級聯一些替換字符串foo


請注意,使用超前,你可以做同樣的preg_replace

echo preg_replace('/\.popup(?=[\s\.{])/', 'foo', $s); 
//=> foo .popup-option 
+1

我唯一缺少的情況是,它只能是'.popup'不與此正則表達式工作因爲我具體說它必須跟着空格,點或{。無論哪種方式,我稍微改變你的答案到'/ \。popup((?= [\ s \。{])| \ z)/' –