我在PHP中使用正則表達式。這是我的腳本:如何刪除此正則表達式輸出中的空格?
$s="2044 blablabla 2033 blablabla 2088";
echo preg_replace("/(20)\d\d/","$1 14",$s);
結果是這樣的:
20 14 blablabla 20 14 blablabla 20 14
我想刪除20
和14
之間的空間得到結果2014
。我怎麼做?
我在PHP中使用正則表達式。這是我的腳本:如何刪除此正則表達式輸出中的空格?
$s="2044 blablabla 2033 blablabla 2088";
echo preg_replace("/(20)\d\d/","$1 14",$s);
結果是這樣的:
20 14 blablabla 20 14 blablabla 20 14
我想刪除20
和14
之間的空間得到結果2014
。我怎麼做?
你可以簡單地做這樣的,
$s="2044 blablabla 2033 blablabla 2088";
echo preg_replace("/(20\d\d)/","2014",$s);
mmmm ....你用'20'硬編碼'$ 1'!??? – NoobEditor 2014-09-12 13:18:24
他使用這種模式'(20)\ d \ d'不是'((d \ d)\ d \ d' – 2014-09-12 13:19:15
是的它適用於這個問題,它不是一般的解決方案,謝謝所有 – ro0xandr 2014-09-12 13:25:32
檢查preg_replace
手冊後:
當與替換模式,其中一個反向引用被 緊接着另一個號碼工作(即:一個匹配的模式後放置文字數 立即),則不能使用用於反向引用的熟悉的
\\1
表示法。\\11
,例如,將 混淆preg_replace()
,因爲它不知道你是否希望\\1
逆向引用後面文字1
,或\\11
逆向引用後面什麼都沒有。在這種情況下,解決方案是使用\${1}1
。這創建了一個單獨的反向引用,將1
作爲文字。
因此,使用
"\${1}14"
或
'${1}14'
新的結果類似這樣4 blablabla 4 blablabla 4 – ro0xandr 2014-09-12 13:14:05
@ ro0xandr檢查上面的編輯。 – hjpotter92 2014-09-12 13:19:12
@CasimiretHippolyte擊敗你8秒...! :D – NoobEditor 2014-09-12 13:20:20
您需要使用preg_replace_callback()
功能:
echo preg_replace_callback("/(20)\d\d/", function($number) {
return $number[1].'14';
},$s);
// 2014 blablabla 2014 blablabla 2014
你需要使用單引號內大括號:
echo preg_replace("/(20)\d\d/",'${1}14',$s);
RTM:http://php.net/manual/en/function.preg-replace.php – 2014-09-12 17:21:54