0

我正在阅读 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我得到了一个意想不到的结果,至少就我对正则表达式的理解而言。它是一个值为“R”的数组元素[0]。

这是为什么?

4

2 回答 2

3

.匹配除换行符以外的任何字符。所以它会返回第一个字符,因为+它不存在。

于 2013-03-05T14:33:31.757 回答
2

因为/./意味着一个字符,而不是全部。您应该使用量词:

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

如果你给量词加上后缀,?则意味着不贪婪的匹配(这意味着它试图匹配尽可能少的字符,而不是尽可能多的字符)。

一个完整的结果:

Input string: 'Robert'

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

/.*/     Robert
/.*?/    null
/.+/     Robert
/.+?/    R
/.?/     R
/.??/    null
于 2013-03-05T14:40:54.820 回答