php preg_match函数第3个参数

时间:2013-03-05 14:32:14

标签: php regex preg-match

我正在阅读preg_match函数的在线手册,并编写了一段代码来测试它。与此同时,我使用preg_grep编写了另一段代码。

以下是代码:

$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我得到了我所期望的,一个值为“Robert”的数组元素[0],这是有道理的。

对于preg_match我得到了意想不到的结果,至少我对regexp的理解。它是一个数组元素[0],其值为“R”。

为什么?

2 个答案:

答案 0 :(得分:3)

.匹配除新行之外的任何字符。因此,它将返回第一个字符,因为+不存在。

答案 1 :(得分:2)

因为/./表示一个字符,而不是全部字符。你应该使用量词:

  • *表示0个或更多字符
  • +表示1个或多个字符
  • ?表示0或1个字符

如果使用?后缀量词,则表示不匹配(这意味着它会尝试匹配尽可能少的字符,而不是尽可能多的字符。)

完整的结果:

Input string: 'Robert'

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

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