我正在阅读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”。
为什么?
答案 0 :(得分:3)
.
匹配除新行之外的任何字符。因此,它将返回第一个字符,因为+
不存在。
答案 1 :(得分:2)
因为/./
表示一个字符,而不是全部字符。你应该使用量词:
*
表示0个或更多字符+
表示1个或多个字符?
表示0或1个字符如果使用?
后缀量词,则表示不匹配(这意味着它会尝试匹配尽可能少的字符,而不是尽可能多的字符。)
完整的结果:
Input string: 'Robert'
Regex Result
===== ======
/.*/ Robert
/.*?/ null
/.+/ Robert
/.+?/ R
/.?/ R
/.??/ null