php预匹配函数第三个参数

php预匹配函数第三个参数,php,regex,preg-match,Php,Regex,Preg Match,我正在阅读preg_match函数的在线手册,并编写了一段代码来测试它。同时,我还使用preg\u grep编写了另一段代码 代码如下: $subject = array("Robert"); $subject2 = "Robert"; $pattern = "/./"; $result = preg_grep($pattern, $subject); $result2 = preg_match($pattern, $subject2, $matches); echo "<pre>

我正在阅读preg_match函数的在线手册,并编写了一段代码来测试它。同时,我还使用
preg\u 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>";
$subject=array(“Robert”);
$subject2=“罗伯特”;
$pattern=“/。/”;
$result=preg_grep($pattern,$subject);
$result2=preg_match($pattern,$subject2,$matches);
回声“;
打印(结果);
打印(匹配项);
回声“;
对于
preg_grep
我得到了我所期望的,一个值为“Robert”的数组元素[0],这是有意义的

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


这是为什么?

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

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

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

  • *
    表示0个或更多字符
  • +
    表示一个或多个字符
  • 表示0或1个字符
如果在量词后面加上
后缀,则表示不匹配(这意味着它尝试匹配尽可能少的字符,而不是尽可能多的字符)

一个完整的结果:

输入字符串:“Robert”
正则表达式结果
=====    ======
/*罗伯特
/.*?/null
/罗伯特
/.+?/R
/.?/R
/.??/null

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

  • *
    表示0个或更多字符
  • +
    表示一个或多个字符
  • 表示0或1个字符
如果在量词后面加上
后缀,则表示不匹配(这意味着它尝试匹配尽可能少的字符,而不是尽可能多的字符)

一个完整的结果:

输入字符串:“Robert”
正则表达式结果
=====    ======
/*罗伯特
/.*?/null
/罗伯特
/.+?/R
/.?/R
/.??/null