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」の配列element[0]で、これは理にかなっています。

preg_match少なくともregexpを理解している限り、予期しない結果が得られたからです。これは、値が「R」の配列element[0]でした。

何故ですか?

4

2 に答える 2

3

.改行を除く任意の文字に一致します。したがって、+存在しないため、最初の文字が返されます。

于 2013-03-05T14:33:31.757 に答える
2

/./すべてではなく、1 つの文字を意味するためです。数量詞を使用する必要があります。

  • *は 0 文字以上を意味します
  • +1文字以上を意味します
  • ?0 または 1 文字を意味します

量指定子にサフィックスを付ける?と、貪欲でない一致を意味します (つまり、可能な限り多くの文字ではなく、できるだけ少ない文字に一致しようとすることを意味します)。

完全な結果:

Input string: 'Robert'

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

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