2011-08-19 122 views
1

preq_match應該返回true以測試什麼東西?preq_match:應該什麼都不匹配?

$needle = ""; 
$haystack = "test"; 
$result = preg_match("/" . $needle . "/i", $haystack); 

我希望$result0,但它是1

按道理講,在一些測試沒有什麼應該什麼都不產生......怎麼這首歌去了?沒有什麼東西沒有留下任何東西......必須有東西......如果你想和我在一起!

我不希望有預先測試,以確保沒有任何東西是我之前測試了反對的東西:-)什麼。嗯......如果我嘗試過,我不認爲我會更困惑。

+0

我建議你睡一會兒。 –

回答

3

實際上有幾個字符串"test"。他們是(至少,看我一邊下文):

<nothing>t<nothing>e<nothing>s<nothing>t<nothing> 

這就是爲什麼你得到1的結果,它找到t之前,首先什麼。

而且我懷疑,要麼你記錯那首歌或者是誰寫的是不是一個工程師的BOD。沒有東西離開東西(假設我們正在討論減法操作)。

如果是「無所不能的東西」,那會更有意義,但作爲我的肛門保持型人格類型,我必須堅持認爲你無法從無到有:-)


順便說一句,我會對preg_match_all返回那個感興趣。有人可能認爲它是5(我懷疑它是這樣),但有些人可能會從純粹的理論觀點認爲,在字符串中的每個點上都有無數的記號。我希望PHP的開發人員比這更實際。

+2

嚴格來說,還有更多''比...;) –

+0

一個空白的針應該失敗,因爲總是返回true的* test *不是一個測試,將被歸類爲一個bug。由於您執行測試以查看一個表達式是否與另一個表達式相匹配,因此您不應該*先*測試第一個表達式以確保它是第一個有效的表達式......特別是因爲測試正在測試測試以確保無論如何它是有效的。 –

+0

@David,這可能是_you_將如何實現它,但它不是它的方式_implemented_ :-) – paxdiablo

2

基本上,在這種使用中,preg_match測試用於在串給定的圖案的一個實例。一個空的正則表達式,我們只是說,就像空字符串一樣。 「測試」中是否有空字符串?是;它在第一個t之前,最後一個t之後,以及每個連續的一對字母之間。所以合乎邏輯的結果就是你所得到的。

相關問題