2013-03-05 114 views
0

我正在閱讀preg_match函數的在線手冊,並寫了一段代碼來測試它。隨着它,我寫了另一段代碼使用preg_grepphp preg_match函數第三個參數

下面是代碼:

$subject = array("Robert"); 
$subject2 = "Robert"; 
$pattern = "/./"; 


$result = preg_grep($pattern, $subject); 
$result2 = preg_match($pattern, $subject2, $matches); 
echo "<pre>"; 
print_r($result); 
print_r($matches); 
echo "</pre>"; 

preg_grep我得到了我的預期,數組元素[0]的值爲「羅伯特」,這是有道理的。

對於preg_match我得到了意想不到的結果,至少對我的正則表達式有所瞭解。它是一個數值爲「R」的數組元素[0]。

這是爲什麼?

回答

3

.匹配除新行以外的任何字符。所以它會返回第一個字符,因爲+不存在。

2

因爲/./表示一個字符,而不是全部。你應該用一個量詞:

  • *意味着0個或更多字符
  • +意味着1個或多個字符
  • ?指0或1個字符

如果後綴量詞與?這意味着一個不真實的匹配(這意味着它儘可能少地匹配字符,而不是儘可能多的字符)。

一個完整的結果:

Input string: 'Robert' 

Regex Result 
===== ====== 

/.*/  Robert 
/.*?/ null 
/.+/  Robert 
/.+?/ R 
/.?/  R 
/.??/ null