2014-09-12 83 views
8

我在PHP中使用正則表達式。這是我的腳本:如何刪除此正則表達式輸出中的空格?

$s="2044 blablabla 2033 blablabla 2088"; 
echo preg_replace("/(20)\d\d/","$1 14",$s); 

結果是這樣的:

20 14 blablabla 20 14 blablabla 20 14 

我想刪除2014之間的空間得到結果2014。我怎麼做?

+1

RTM:http://php.net/manual/en/function.preg-replace.php – 2014-09-12 17:21:54

回答

4

你可以簡單地做這樣的,

$s="2044 blablabla 2033 blablabla 2088"; 
echo preg_replace("/(20\d\d)/","2014",$s); 
+0

mmmm ....你用'20'硬編碼'$ 1'!??? – NoobEditor 2014-09-12 13:18:24

+1

他使用這種模式'(20)\ d \ d'不是'((d \ d)\ d \ d' – 2014-09-12 13:19:15

+0

是的它適用於這個問題,它不是一般的解決方案,謝謝所有 – ro0xandr 2014-09-12 13:25:32

7

檢查preg_replace手冊後:

當與替換模式,其中一個反向引用被 緊接着另一個號碼工作(即:一個匹配的模式後放置文字數 立即),則不能使用用於反向引用的熟悉的 \\1表示法。 \\11,例如,將 混淆preg_replace(),因爲它不知道你是否希望 \\1逆向引用後面文字1,或\\11 逆向引用後面什麼都沒有。在這種情況下,解決方案是使用 \${1}1。這創建了一個單獨的反向引用,將1 作爲文字。

因此,使用

"\${1}14" 

'${1}14' 
+1

新的結果類似這樣4 blablabla 4 blablabla 4 – ro0xandr 2014-09-12 13:14:05

+0

@ ro0xandr檢查上面的編輯。 – hjpotter92 2014-09-12 13:19:12

+0

@CasimiretHippolyte擊敗你8秒...! :D – NoobEditor 2014-09-12 13:20:20

2

您需要使用preg_replace_callback()功能:

echo preg_replace_callback("/(20)\d\d/", function($number) { 
    return $number[1].'14'; 
},$s); 

// 2014 blablabla 2014 blablabla 2014 
12

你需要使用單引號內大括號:

echo preg_replace("/(20)\d\d/",'${1}14',$s); 
相關問題