2017-03-14 4 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'; 
} 

?> 

Grundsätzlich, dieser Code gibt mir falsch. Allerdings, wenn ich [a-z] durch [a-z]* ersetzen, geben Sie mir den Code.Ich brauche Hilfe über Regex PHP

Oder, wenn ich [a-z] ohne * halten, aber ich entfernen <p><p> im preg_match, der Code geben Sie mir wahr.

Ehrlich, ich verstehe nicht, warum die erste mir falsch und die anderen wahr geben. Kann mir jemand erklären warum?

+3

'Ragex' - ein wütender Regex? –

Antwort

2

[a-z] ist, glaube es oder nicht, ein Zeichen. Genau wie wenn ich [ab] setzen würde, wäre das auch "ein Charakter". [a-z]bedeutet das Zeichen kann ein beliebiger Buchstabe sein: abcdefghijklmnopqrstuvwxyz. Wenn wir [a-z]* hinzufügen, erlauben wir jetzt, dass ein Zeichen von [a-z] 0 oder mehr Wiederholungen hat.

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

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

?> 

Schauen Sie sich die Ergebnisse hier:

https://eval.in/753902

+1

Oh, cool. Dachte nie ... aktualisiert es. – Neil

+0

Hey, danke, um mir zu helfen. Ich war sehr beschäftigt. Grundsätzlich "ttt" = 3 Zeichen, richtig? Ich bin mir immer noch nicht sicher, warum https://eval.in/759585 mir die Wahrheit geben. – AlexCold

0

[a-z] Fänge nur ein Zeichen, während [a-z]* fangen Zeichen Länge bis zu 0 bis n.

Und Ihr Muster sollte / eingekapselt werden

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

Die '#' ist ein gültiges Trennzeichen. – chris85

+0

@ chris85, Danke für die Information, die ich nicht kannte – lkdhruw

+0

Sie können mehr hier sehen, http://php.net/manual/en/regexp.reference.delimiters.php. 'Ein Begrenzer kann ein beliebiger nicht alphanumerischer Nicht-Backslash-Zeichen sein. Einige Zeichen sind besser als andere, abhängig von der Zeichenkette. – chris85

0

Ich stellte vor wenigen Tagen eine andere Frage als Kommentar.

Ich werde als Post fragen.

Wenn [a-z] als ein Zeichen betrachtet wird.

<?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'; 
 
} 
 
    
 
?>

Gib mir falsch, weil 'ttt' im Grunde drei Zeichen ist, nicht wahr? Jedoch

,

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

dieser Code geben Sie mir wahr, aber die Zeichenfolge oben ist im Grunde 9 Zeichen.