2011-01-15 17 views
1

Dies findet, was es soll:PHP preg_match: Wie funktioniert die Übergabe einer Variablen an preg_match?

if(!preg_match($match="/^http\/[0-9]+\\.[0-9]+[ \t]+[ \t]*(.*)\$/i",$line,$matches)) 

Aber dies nicht:

if(!preg_match("/^http\/[0-9]+\\.[0-9]+[ \t]+[ \t]*(.*)\$/i",$line,$matches)) 

Die Funktionsreferenz für preg_match sagt, dass das erste Argument sollte übergeben:

Die Muster für die Suche, als Zeichenfolge.

Aber das Arbeitsbeispiel I oben geben weist das Muster zu einer Variablen: $match=...

Was ist hier los? Ich habe noch nie eine Variable gesehen, die mit preg_match verwendet wurde. Ich dachte, es sollte sein:

preg_match(string $regexpattern, string $thingtosearch, array $matches) 

Kann mir jemand erklären, was hier passiert?

+0

Was passiert, wenn Sie zuerst zuweisen, dann tun Sie 'if (! Preg_match ($ match, $ line, $ matches)) ''? Alle diese Fälle sollten das gleiche Ergebnis liefern, da es nicht so wichtig sein sollte, solange Sie ein gültiges Muster übergeben. – BoltClock

Antwort

3

Das erste Beispiel speichert das Muster in einer lokalen Variablen.

if(!preg_match($match="/^http\/[0-9]+\\.[0-9]+[ \t]+[ \t]*(.*)\$/i",$line,$matches)) 

Es entspricht es, so zu schreiben:

$match="/^http\/[0-9]+\\.[0-9]+[ \t]+[ \t]*(.*)\$/i"; 
if(!preg_match($match,$line,$matches)) 

Die preg_match Funktion nicht „sieht“, dass der Parameter einer Variablen zugewiesen wurde, ist es immer nur den Wert erhält - weil es sind keine benannten Funktionsparameter in PHP. Es ist daher unwichtig, wie Sie die lokalen Variablen benennen, und die $ param-Definition im Handbuch hat keinen Einfluss auf die Funktionalität.

Eine mögliche Erklärung für diese Codestruktur ist, dass das Regex-Muster $match später wiederverwendet werden kann. Manchmal wird diese Notation nur zur besseren Lesbarkeit verwendet. (Es fügt den lokalen Variablenbereich hinzu, fügt jedoch einige geringfügige Klarheit hinzu.)

2

Ein gibt den Wert zurück, der zugewiesen wurde. In Ihrem Fall liefert der Zuweisungsausdruck $match="…" den zugewiesenen Wert "…", der denselben Parameter für die Funktion ergibt, wie ohne diese Zuweisung.

es auf diese Weise zu tun, ist in einigen Fällen wie in einem Zustand von while nützlich:

while ($row = mysql_fetch_array($result)) 

Hier $row = mysql_fetch_array($result) den gleichen Wert zurückgibt, die von mysql_fetch_array($result) aber es ist auch zugewiesen $row zurückgegeben wurde.