PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: Regular Expressions: warum immer nur ein Zeichen?


mf_2
2007-09-25, 12:47:57
Hallo,
Ich habe folgenden Befehl:

$result_ungreedy = preg_match_all("/^[0-9]{8}+;+([a-zA-ZäöüÄÖÜ\-\s].*)+;+([a-zA-ZäöüÄÖÜ\-\s].*)+;+(Nord|Ost|West|Süd)+;
+([a-zA-Z0-9]+)+;+(m|w)$/U","00000001;LOL;test;Süd;shsdofjdohduzghuvhidv;m",$test,PREG_PATTERN_ORDER);
Hier möchte ich für $test folgende Ausgabe erhalten:

Array
(
[0] => Array
(
[0] => 00000001;LOL;test;Süd;shsdofjdohduzghuvhidv;m
)

[1] => Array
(
[0] => LOL
)

[2] => Array
(
[0] => test
)

[3] => Array
(
[0] => Süd
)

[4] => Array
(
[0] => shsdofjdohduzghuvhidv
)

[5] => Array
(
[0] => m
)

)

Ich erhalte aber immer nur folgendes (das letzte Zeichen der Strings LOL, test und shsdofjdohduzghuvhidv:


Array
(
[0] => Array
(
[0] => 00000001;LOL;test;Süd;shsdofjdohduzghuvhidv;m
)

[1] => Array
(
[0] => L
)

[2] => Array
(
[0] => t
)

[3] => Array
(
[0] => Süd
)

[4] => Array
(
[0] => v
)

[5] => Array
(
[0] => m
)

)

Was mache ich falsch?

Und dann noch eine Kleinigkeit:
Wenn ich z.B. im ersten Feld (also vor dem ersten Semikolon) einen Buchstaben drin habe oder ungleich 8 Ziffern, dann schmiert mir die Funktion komplett ab. Kann ich irgendwie sagen, dass preg_match_all zum nächsten Semikolon gehen soll und dann ganz normal weitermachen soll?

Danke schonmal,
mf_2

mf_2
2007-09-25, 13:01:27
das erste Problem hat sich erledigt, selber schuld wenn man Ausdrücke schreiben will, aber die Operatoren nicht gut kennt ;)

Jetzt sieht es so aus:

$result_ungreedy = preg_match_all("/^[0-9]{8};([a-zA-ZäöüÄÖÜ\-\s]+);([a-zA-ZäöüÄÖÜ\-\s]+);(Nord|Ost|West|Süd);([a-zA-Z0-9]+);(m|w)$/U","00000001;LOL;test;Süd;shsdofjdohduzghuvhidv;m",$test,PREG_PATTERN_ORDER);


Das zweite Problem besteht jedoch weiter.

Xmas
2007-09-25, 14:45:03
Und dann noch eine Kleinigkeit:
Wenn ich z.B. im ersten Feld (also vor dem ersten Semikolon) einen Buchstaben drin habe oder ungleich 8 Ziffern, dann schmiert mir die Funktion komplett ab. Kann ich irgendwie sagen, dass preg_match_all zum nächsten Semikolon gehen soll und dann ganz normal weitermachen soll?
In diesem Fall würde ich den String erst an jedem Semikolon in Substrings zerlegen und dann jeden Substring auf Gültigkeit prüfen.