PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : String zerteilen mit Regex


saddamski
28.10.2003, 21:11
Hallo zusammen,

ich habe folgendes Problem.

In einem PHP Script, habe ich einen String.
Dieser String kann wie folgt aussehen:

:saddamski!us0r13@saddam123.users.quakenet.org MODE #blatest +k 123

oder

:saddamski!us0r13@saddam123.users.quakenet.org MODE #blatest +i


So, ich möchte den String nun vergleichen, und gleichzeitig aufteilen. Das geht auch soweit mit folgendem Stück Code:


if (preg_match("/^:(.*?)!(.*?) MODE (.*?) (.*?) (.*)/", $line, $m))
{
$nick = $m[1];
$address = $m[2];
$chan = $m[3];
$mode = $m[4];
$target = $m[5];

.... bla bla :)
}


Jetzt gibt es dabei nur ein Problem.
Das Script springt nur in die IF Schleife, wenn der String folgenden Aufbau hat:

:saddamski!us0r13@saddam123.users.quakenet.org MODE #blatest +k 123

Er soll da aber auch reinspringen, wenn der String den anderen Aufbau hat...

Also z.B.

:saddamski!us0r13@saddam123.users.quakenet.org MODE #blatest +i

Ich hab nur keine Ahnung wie ich das anstelle. Ich blick durch diese Regulären Ausdrücke nicht durch :(

Wäre super wenn mir jemand helfen könnte.

Tobias


Jan Krüger
28.10.2003, 23:13
Kurz und herzlos:
/^:(.*?)!(.*?) MODE (.*?) (.*?)(?: (.*))?/

Aber es geht eigentlich noch viel einfacher! Merke: reguläre Ausdrücke ersetzen nicht Programmierlogik... ;)


if (preg_match("/^:(.*?)!(.*?) MODE #/", $line, $m))
{
$nick = $m[1];
$address = $m[2];
list($x, $x, $chan, $mode, $target) = explode(' ', $line, 5);

.... bla bla :)
}

saddamski
29.10.2003, 00:59
Hey, super..danke!


Stimmt...an die Methode, die Sachen nach dem MODE einfach in eine Variable zu packen und mit explode zerteilen, hab ich gar nicht gedacht :)


Danke nochmals!