2017-01-10 6 views
0

PHPの正規表現を学ぶ 通常、次のコードでは画面に「FALSE」と表示されるはずです しかし、それは私に「TRUE」と表示されます なぜ教えてください。 はあなたの部分一致のための非固定正規表現検索で使用PHPの正規表現のクラスIntervals

<?php 

if (preg_match("#[^a-z]#", "la nuit, tous les chats sont gras")) 
{echo 'TRUE';} 
else 
{echo 'FALSE';} 

?> 
+3

あなたはfalseを期待するのはなぜ? –

+1

スペースとコンマはアルファベット以外の文字です。完全一致の場合はアンカーを使用するか、http://php.net/manual/en/function.ctype-lower.phpを使用します。 – chris85

+0

また、「la nuit、tous les chats sont gr * i * s」 –

答えて

2

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
+0

[this regex demo](https://regex101.com/r/UiMZN4/1)も参照してください。 –

0

私はあなたのためにこれを分割してみましょう:

  • [] Aグループ
  • ^インサイドAグループ、グループ内のすべての定義は、すべてのそれ
  • a-zの反対を意味し、 "ないで" という意味小文字から小文字までの文字

最後にすべてのスペースとカンマが見つかりました。

0

正規表現では、アルファベット以外の最初の文字を見つけようとしています。この文字列には、この記号があります。それを確認してください:

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)