2011-07-18 22 views
1

我只是在想如何解決這個問題。奇怪的preg_replace轉義?

我有這樣的代碼

<?php 
$test = "\u0000hi"; 
preg_match("|\\\\u0000|", $test, $a); 
print_r($a); 
?> 

在上述情況下,它的工作原理。然而,我不知道爲什麼我應該使用太多逃避角色?

以下情況下

<?php 
$test = "\\u0000hi"; 
preg_match("|\\\\\\\\u0000|", $test, $a); 
print_r($a); 
?> 

我有8轉義字符在$test變量preg_match\和兩個(雙數,如前面的例子)

有人能解釋我這個初學者的問題?

+0

如果有疑問,你總是可以使用'preg_quote()'來逃避你的字符串。 – Kokos

回答

1

,如果你想找到一個反斜槓'\u'

你需要逃避它在你的正則表達式'/\\u/'

,如果你把你的正則表達式中的雙引號,你需要的逃生反斜線B/C,否則他們被評估爲字符串中的一個反斜槓,然後作爲元字符在您的正則表達式:

"/\\\\u/" 

在我寫「\ U」,而不是頂「\ U」狀inyour情況下,b /其實如果c \ u是你的「\ u」中的一個控制字符無論如何不會找到任何反斜槓。

+0

所以告訴我,它應該是什麼樣子,當我會喜歡找兩個\\? – genesis

+0

連續八個反斜槓。當然「\\」=='\' – Raffael

+0

哎呦。我忘了$測試也正在逃脫。 – genesis

1

兩者$test字符串符號在內部計算爲相同的字符串。嘗試一下:

var_dump("\u0000hi"); 
// Outputs string(8) "\u0000hi" 

var_dump("\\u0000hi"); 
//Outputs string(8) "\u0000hi" 

相同的原始字符串,所以你需要相同的正則表達式來匹配它。這是其中有四個\的那個。

+0

[我爲它打開了新的問題](http://stackoverflow.com/questions/6731660/strange-preg-quote-behavior),因爲我不知道,爲什麼 – genesis