Wie funktioniert denn preg_match nun?
Achim Haupt
- php
0 Joachim0 Marc Reichelt0 Sam
Hey!
ich habe mich jetzt mit preg_match beschäftigt und verstehe nicht, wie ich abfrage, ob es nun übereinstimmt oder nicht. Im Manual steht '...liefert 0 zurück, wenn keine Übereinstimmung, liefert 1 zurück wenn übereinstimmung'. Gleich darauf wird aber mit if (preg_match(...)) abgefragt ob eine Übereinstimmung vorliegt. Ja was denn nun? Bei mir funktioniert weder noch.
Ich frage ab preg_match('/[a-zA-Z0-9_-]/', $text) und es tut sich nichts, weder wenn der Text ok ist oder nicht. Bittebittebitte erklärt mir das. Und wofür ist das ^ Zeichen gut? Sollte ich das auch in meinem Beispiel nutzen oder nicht? Und wann sollte ich es überhaupt benutzen?
Voll verwirrter Achim Haupt
Hi,
Ich frage ab preg_match('/[a-zA-Z0-9_-]/', $text)
finde einen Buchstaben oder eine Zahl oder ein "-" oder ein "_"...
Vielleicht solltest Du das mit den regulaeren Ausdruecken erst mal Nachlesen...
Uebrigens macht es nix, dass der Link in die Perl-Abteilung geht.
Gruesse, Joachim
Hi,
Ich frage ab preg_match('/[a-zA-Z0-9_-]/', $text)
finde einen Buchstaben oder eine Zahl oder ein "-" oder ein "_"...
Vielleicht solltest Du das mit den regulaeren Ausdruecken erst mal Nachlesen...
Uebrigens macht es nix, dass der Link in die Perl-Abteilung geht.Gruesse, Joachim
Was? Ich dachte das bedeutet, dass die Zeichenfolge nur aus a-z groß oder klein 0-9 und - oder _ bestehen darf? In eckigen Klammer gebe ich doch die Zeichen an, aus denen die Zeichenfolge bestehen darf.
Hi Achim,
Was? Ich dachte das bedeutet, dass die Zeichenfolge nur aus a-z groß oder klein 0-9 und - oder _ bestehen darf? In eckigen Klammer gebe ich doch die Zeichen an, aus denen die Zeichenfolge bestehen darf.
Ist ja auch so, aber [a] würde nur auf ein a passen, [a-z] würde nur auf einen kleine Buchstaben passen.
Wenn du mehrere buchstaben "matchen" willst:
[<Zeichenklasse>]* => 0 oder mehrmals (beliebig oft)
[<Zeichenklasse>]+ => 1 oder mehrmals (beliebig oft)
[<Zeichenklasse>]{x} => x-mal ein Buchstabe aus der Zeichnklasse
Du solltest vielleicht auch mal http://tut.php-q.net/regex.html durcharbeiten.
MfG, Dennis.
[<Zeichenklasse>]{x} => x-mal ein Buchstabe aus der Zeichnklasse
Super, ich glaube das wars, jetzt hab ichs hinbekommen und auch besser verstanden. So stelle ich mir eine gute Erklärung vor, danke.
Nur noch eine Verständnisfrage: stimmt es, dass ich mit angehängtem {x,y} eingrenzen kann, dass mindestens x und maximal y Zeichen vorhanden sein müssen? Und kann ich mit regulären Ausdrücken auch abfragen ob genau 50 Zeichen aus der Zeichenklasse vorkommen? Denn mit dieser Methode wprd zwar auf 50 Zeichen geprüft, ist irgendwo ein 51. verbotenes Zeichen, ist die Abfrage trotzdem gültig. Oder sollte ich davor dann besser noch strlen() anwenden?
Gruß, Sam
Hi Sam,
[<Zeichenklasse>]{x} => x-mal ein Buchstabe aus der Zeichnklasse
Super, ich glaube das wars, jetzt hab ichs hinbekommen und auch besser verstanden. So stelle ich mir eine gute Erklärung vor, danke.
Nur noch eine Verständnisfrage: stimmt es, dass ich mit angehängtem {x,y} eingrenzen kann, dass mindestens x und maximal y Zeichen vorhanden sein müssen?
Hättest du den von mir genannten Link abgearbeitet wüsstest du es: http://tut.php-q.net/regex.html#u10 -> Ja, das geht:
[a-z]{3,6} => 3 bis 6 Kleinbuchstaben
[A-Z]{5,} => 5 oder mehr Großbuchstaben.
Und kann ich mit regulären Ausdrücken auch abfragen ob genau 50 Zeichen aus der Zeichenklasse vorkommen? Denn mit dieser Methode wprd zwar auf 50 Zeichen geprüft, ist irgendwo ein 51. verbotenes Zeichen, ist die Abfrage trotzdem gültig. Oder sollte ich davor dann besser noch strlen() anwenden?
Auch das wüsstest du, wenn du den Link durchgearbeitet hättest ;-) Es steht hier: http://tut.php-q.net/regex.html#u12.
Mit ^ und $ kannst du Anfang und Ende vom String genau festlegen, es müsste also so aussehen:
[1]{50}$ => 50 Kleinbuchstaben, sonst nix
MfG, Dennis.
a-z ↩︎
Sorry, ich dachte ich frage zuerst und schaue dann. ;)
Hi Sam,
Sorry, ich dachte ich frage zuerst und schaue dann. ;)
Nicht schlimm, aber gewöhn dir das für die Zukunft besser ab.
Ach ja, und les dir mal noch den letzen Absatz da durch mit dem "Regex haben hunger" - da macht man am Anfang auch oft Denkfehler ;-)
MfG, Dennis.
Hallo Achim,
eine Einführung zu den regular Expressions hat dir Joachim ja schon gegeben, ich kümmer mich mal um dein anderes Problem:
ich habe mich jetzt mit preg_match beschäftigt und verstehe nicht, wie ich abfrage, ob es nun übereinstimmt oder nicht. Im Manual steht '...liefert 0 zurück, wenn keine Übereinstimmung, liefert 1 zurück wenn übereinstimmung'. Gleich darauf wird aber mit if (preg_match(...)) abgefragt ob eine Übereinstimmung vorliegt. Ja was denn nun? Bei mir funktioniert weder noch.
Ich frage ab preg_match('/[a-zA-Z0-9_-]/', $text) und es tut sich nichts, weder wenn der Text ok ist oder nicht.
Ich glaube du verstehst etwas grundlegendes von Funktionen nicht:
Durch den Aufruf
preg_match('/[a-zA-Z0-9_-]/', $text);
allein tut sich absolut nichts, denn was soll PHP denn mit dem Rückgabewert anfangen? Du schreibst ja nicht was damit angestellt werden soll.
So wird zumindest der Wert abgespeichert:
$result = preg_match('/[a-zA-Z0-9_-]/', $text);
In der Variable $result ist nun ein Wahrheitswert erfasst (die 0 oder die 1), und mit dem if() muss dieser natürlich nun abgefangen werden.
So verstanden?
Marc Reichelt || http://www.marcreichelt.de/
Ja, das dachte ich auch, bringt aber auch kein Ergebnis.
Und schau mal hier (http://www.php.net/preg_match, Beispiele 2 und 3, entweder machen die einen Fehler, oder es geht doch auch mit einfach if(preg_match.... (das if hatte ich natürlich immer drin, habe ich vorhin nur vergessen).