PHPの正規表現を学ぶ 通常、次のコードでは画面に「FALSE」と表示されるはずです しかし、それは私に「TRUE」と表示されます なぜ教えてください。 はあなたの部分一致のための非固定正規表現検索で使用PHPの正規表現のクラスIntervals
<?php
if (preg_match("#[^a-z]#", "la nuit, tous les chats sont gras"))
{echo 'TRUE';}
else
{echo 'FALSE';}
?>
PHPの正規表現を学ぶ 通常、次のコードでは画面に「FALSE」と表示されるはずです しかし、それは私に「TRUE」と表示されます なぜ教えてください。 はあなたの部分一致のための非固定正規表現検索で使用PHPの正規表現のクラスIntervals
<?php
if (preg_match("#[^a-z]#", "la nuit, tous les chats sont gras"))
{echo 'TRUE';}
else
{echo 'FALSE';}
?>
preg_match
ありがとうございます。
あなたは、文字列全体が小文字のASCII文字以外の文字で構成されて確認してくださいPHP demo
詳細を参照してください
if (preg_match("#^[^a-z]*$#", "la nuit, tous les chats sont gras"))
{echo 'TRUE';}
else
{echo 'FALSE';}
を使用する場合:
^
- 文字列を開始[^a-z]*
- 小文字のASCII文字以外のゼロ個以上の文字。$
- 文字列の末尾(文字列の最後に一致する場合は\z
)[this regex demo](https://regex101.com/r/UiMZN4/1)も参照してください。 –
私はあなたのためにこれを分割してみましょう:
[]
Aグループ^
インサイドAグループ、グループ内のすべての定義は、すべてのそれa-z
の反対を意味し、 "ないで" という意味小文字から小文字までの文字最後にすべてのスペースとカンマが見つかりました。
正規表現では、アルファベット以外の最初の文字を見つけようとしています。この文字列には、この記号があります。それを確認してください:
preg_match_all("#^[^a-z]*$#", "la nuit, tous les chats sont gras", $matches);
var_dump($matches);
結果
array (size=1)
0 =>
array (size=7)
0 => string ' ' (length=1)
1 => string ',' (length=1)
2 => string ' ' (length=1)
3 => string ' ' (length=1)
4 => string ' ' (length=1)
5 => string ' ' (length=1)
6 => string ' ' (length=1)
あなたはfalseを期待するのはなぜ? –
スペースとコンマはアルファベット以外の文字です。完全一致の場合はアンカーを使用するか、http://php.net/manual/en/function.ctype-lower.phpを使用します。 – chris85
また、「la nuit、tous les chats sont gr * i * s」 –