Wie ändern: Reguläre Ausdrücke Funktionen (POSIX erweitert)

Snodri

Mitglied
Habe ein kleines Problem mit folgenem Code:

Code:
$regex = "{[a-zA-Z_]+:[a-zA-Z0-9_[:blank:]#]*:[a-zA-ZäöüÄÖÜß&,;0-9_#[:blank:]:]*}";
$check = ereg($regex, $zeile, $string);

An der 2. Position wird teilweise (in Abhängig vom Befehl in Pos. 1) der Datenbankname eingetragen. Des weiteren wird mit $check überprüft, ob mehr als 1 Datensatz vorhanden ist.
Nun bin ich faul: Nur weil sich eine Vorlage im Datenbankname ändert, möchte ich keine neue Vorlage anlagen. Wie kann ich nun
a) auf Pos. 2 auch nichts oder Leerzeichen eingeben
b) die Prüfroutine so ändern, dass trotzdem mehr als ein Datensatz gelesen wird. Wenn es der Befehl in Pos. 1 verlangt, ist beim Befehl für Pos. 2 der db_name zugewiesen.

Merci

PS. In den (Hand)Büchern schreiben die scheinbar immer ab - überall das gleiche Beispiel mit Datum.

Das hab ich noch gefunden:
Code:
[:digit:]      Only the digits 0 to 9
[:alnum:]      Any alphanumeric character 0 to 9 OR A to Z or a to z.   
[:alpha:]      Any alpha character A to Z or a to z.  
[:blank:]      Space and TAB characters only.   
[:xdigit:]    .   
[:punct:]      Punctuation symbols . , " ' ? ! ; :   
[:print:]      Any printable character.   
[:space:]      Any space characters.   
[:graph:]      .   
[:upper:]      Any alpha character A to Z.   
[:lower:]      Any alpha character a to z.   
[:cntrl:]        .
 
a:welche Position2?
b:welche Datensätze?

Du musst wohl etwas näher ins Detail gehen...z.B. mal posten, was da in $zeile steht(oder stehen könnte)
 
Die einezelnen Positionen sind mit : voneinander getrennt.
Pos 1 ( [a-zA-Z_]+ ) gibt den Befehl z.B. List, Prozent, Link, Referenz ...
Pos 2 ( [a-zA-Z0-9_[:blank:]#]* ) enthält teilweise den db_name, teilweise andere Werte
Pos 3 ( [a-zA-ZäöüÄÖÜß&,;0-9_#[:blank:]:]* ) überprüft die Datenbank auf bestimmte Vorgaben z.B. ob ein Feld aktiv ist oder nicht.

$regex = {Ausdruck der geschweiften Klammer}
$zeile = Befehlszeile in der Vorlage nach den Vorgaben von $regex (z.b. {List:db_name::::sortierung}
$string = identisch mit Zeile

Für's erste würde mir schon mal reichen zu wissen, was dies [:blank:] zusätzlich bedeutet. a-zA-Z sind wohl die erlaubten Zeichen. * und + müsste die Art der Verknüpfung mit dem Nachfolger sein (?) ...
Bei der Ausgabe von $check kommt eine Zahl, woher kommt die ?

Also erst möchte ich mal den Sinn besser verstehen.

Merci
 
[:blank:] bedeutet Leerzeichen oder Tabulator(jedoch keine Zeilenumbrüche oder sonstige Steuerzeichen)

Das * bedeutet, dass das vorrangegangene Zeichen beliebig oft(auch garnicht) vorkommen kann.

Das + hingegen bedeutet im Gegensatz dazu, dass das vorrangegangene Zeichen mindestens 1mal(ansonsten auch beliebig oft) vorkommt.

Prinzipiell würd ich dir raten, auf ereg() etc. und das Posix-Zeug zu verzichten, und stattdessen die PCRE-Funktionen zu verwenden...die sind weitaus komfortabler und bieten mehr Möglichkeiten.

Du findest hier auch ein hervorragendes RegExp-Tutorial
 
Zurück