2013-03-05 83 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