Draganis: Reguläre Ausdrücke

Hy,

ich hab keine Ahnung von Regulären Ausdrücken und wag mich jetzt zum ersten Mal da rein...

jetzt bekomm ich sofort nen Befehl an den Kopf geworfen und komm damit nicht zurecht...
Vielleicht kann mir jemand von euch dabei helfen....

Das ist der Befehl...

eregi("^/(msg|to)[:space:][:space:]$", $M, $Cmd)

der sucht nach was das ungefähr so aussehen soll:

/msg Username message

jetzt soll er aber nach
/msg Username: message
suchen
Wie bekomm ich das denn hin....

Ich versteh ja den eregi-Befehl nichmal richtig...
Hab schon ein PHP-Buch zu rate gezogen und auch php.net gefragt, doch nirgends hab ich was richtig gutes gefunden, was mir half...
Was ich weiss, iss dass er das Array $Cmd mit 4 sachen füllt...
$Cmd[0] = kompletter String
$Cmd[1] = /msg
$Cmd[2] = Username
$Cmd[3] = message

Was ich noch weiss, ist daß die 3 Strings durch Leerzeichen  ([[:space:]]) getrennt sind...
Nur stellt sich mir die Frage, wo und wie ich den : einsetzen muss, damit ich das gewünschte ergebnis bekomm...

Thnx

Sven

  1. Joho,

    eregi("^/(msg|to)[:space:][:space:]$", $M, $Cmd)

    [...]

    /msg Username message

    [...]

    /msg Username: message

    preg_match("!/^(\S+)\s+(\S+):?\s(.+)$!",$var,$regs);

    $regs[0] -> string
    $regs[1] -> /<command>
    $regs[2] -> <Username>
    $regs[3] -> <messi>

    Zur Erklaerung:
    Der String soll mit alles ausser einem Whitespace (\S - \S ist die Negierung zu \s ->
    alles, ausser Whitespaces) beginnen (^) - so haben wir das Kommando gematcht. Darauf folgen
    sollen wieder Whitespaces (\s), gefolgt von nicht-Whitespaces (\S) und einem oder keinem (?)
    Doppelpunkt - so matchen wir den Usernamen. Als letztes noch die Messi. Die Messi ist vom
    Usernamen getrennt durch ein(!) Whitespace (\s) und danach folgen beliebige Zeichen (.). Das
    Plus steht jeweils fuer mindestens ein, maximal unendlich Zeichen.

    Hab schon ein PHP-Buch zu rate gezogen und auch php.net gefragt, doch nirgends hab ich
    was richtig gutes gefunden, was mir half...

    Mastering Regular Expressions kann ich empfehlen.

    Gruss,
     CK
     http://wwwtech.de

    --
    s s^s<DATA>se;s (([^\s]))(ord($1)%2?
    chr(ord($1)-5):chr(ord($1)-3))sieg;s s^s$_see;
    __END__
    uwlsy%*Sr%kqdphv%yr%AFN4%dy%zzzyhfm3ihC*1'as'>