2017-03-14 23 views
-1
<?php 
$regex = '<p>ttt<p>'; 

if (preg_match('#<p>[a-z]<p>#i', $regex, $result)) 
{ 
    echo 'True'; 
    echo $result[0]; 
} 
else 
{ 
    echo 'False'; 
} 

?> 

基本的に、このコードは私に偽を与える。しかし、[a-z][a-z]*に置き換えた場合、コードは私に真実を与えます。私は正規表現PHPの助けが必要

*なしで[a-z]を保持していますが、preg_match<p><p>を削除した場合、そのコードは真実です。

正直なところ、私は最初に私に偽を与え、他は真実である理由を理解していません。誰も私の理由を説明することはできますか?

+3

'ragex' - 怒っている正規表現ですか? –

答えて

2

[a-z]は、1文字と見なされます。 [ab]と同じように、それも「1文字」になります。 [a-z]は、を意味します。この文字には任意の文字を使用できます。abcdefghijklmnopqrstuvwxyz。 [a-z]*を追加すると、[a-z]の1文字に0以上の繰り返しを含めることができます。

<?php 
$regex = '<p>ttt<p>'; 

if (preg_match('#<p>[a-z]*<p>#i', $regex, $result)) 
{ 
    echo 'True'; 
    echo $result[0]; 
} 
else 
{ 
    echo 'False'; 
} 

?> 

ここでの結果チェックアウト:

https://eval.in/753902

+1

ああ、冷たい。決してそれを考えなかった...それを更新しました。 – Neil

+0

ねえ、助けてくれてありがとう。私は本当に忙しかったです。 基本的には、「ttt」= 3文字、そうですか? 私はまだhttps://eval.in/759585が私に本当の理由を与えるのかどうかは分かりません。 – AlexCold

0

[a-z]キャッチ唯一の文字nを0点で最大[a-z]*キャッチ文字長しばらく。

そして、あなたのパターンは、私は数日前にコメントとして別の質問を投稿/

/<p>[a-z]*<p>/i 
+0

'# 'は有効な区切り文字です。 – chris85

+0

@ chris85、この情報をお寄せいただきありがとうございます – lkdhruw

+0

詳細はhttp://php.net/manual/en/regexp.reference.delimiters.phpをご覧ください。 '区切り文字には英数字以外の非バックスラッシュ、空白以外の文字を使うことができます。文字列によっては、他の文字より優れている文字もあります。 – chris85

0

によってカプセル化されなければなりません。

投稿とおねがいします。

[a-z]が1文字とみなされる場合。

<?php 
 
$regex = '<p>ttt<p>'; 
 
    
 
if (preg_match('/<p>[a-z]<p>/i', $regex, $result)) 
 
{ 
 
\t echo 'True'; 
 
\t echo $result[0]; 
 
} 
 
else 
 
{ 
 
\t echo 'False'; 
 
} 
 
    
 
?>

'TTT' は右、基本的には3つの文字なので、私にはfalseを与えますか?

はしかし、

<?php 
 
$regex = '<p>ttt<p>'; 
 
    
 
if (preg_match('/[a-z]/i', $regex, $result)) 
 
{ 
 
\t echo 'True'; 
 
\t echo $result[0]; 
 
} 
 
else 
 
{ 
 
\t echo 'False'; 
 
} 
 
    
 
?>

このコードでは、本当の私を与えるが、上記の文字列は、基本的には9つの文字です。

関連する問題