Akkutes Regex-Problem

Biloboy

Benutzer
Mitglied seit
02.10.2001
Beiträge
53
Reaktionspunkte
2
Hi zusammen

Hier mein Problemcode:

<?php

$test = array("12","1","122");
$regex = "12?";

foreach($test as $value) {
if(preg_match("/$regex/",$value)) {
print $value."<br />";
}
}

?>

Eigentlich sollte die Ausgabe ja

12
1

sein.

Doch bei mir zeigt es immer

12
1
122

an.

Wo habe ich einen Fehler gemacht? Schaue nicht mehr durch....
 

Zeitkind

Benutzer
Mitglied seit
02.01.2003
Beiträge
36
Reaktionspunkte
0
Biloboy am 24.05.2007 10:19 schrieb:
[blub]

$test = array("12","1","122");
$regex = "12?";

Eigentlich sollte die Ausgabe ja
12
1

Doch bei mir zeigt es immer
12
1
122

Wo habe ich einen Fehler gemacht? Schaue nicht mehr durch....

Hoi,

also dein Programm funktioniert einwandfrei. Der 'Fehler' liegt hier bei dem regEx von 12?. Das ? bedeutet (in dem Fall) dass von dem vorher stehenden Buchstaben entweder eins oder keins vorhanden sein darf.

Ergo checkt das Programm:
12 - regEx 12 (hier zieht die 1x vorhanden Regel)
1 - regEx 1 (hier dann die 0x vorhanden Regel)
122 - regEx 1 (hier zieht auch die 0x Regel.. und zwar weil 2 ja entweder einmal oder keinmal vorkommen kann. Wenn die 2 gar nicht vorkommt, checkt er ob die "1" (alles was vom regEx übrig bleibt) in 122 vorkommt.. und genau deswegen stimmt die Ausgabe.)

edit: Zu 122 .. wenn ichs mir so recht überlege, kann da bei deiner Regel gelten was will.. denn auch wenn die 2 1x vorhanden ist, ist dein regEx 12.. und das ist immer noch in 122 vorhanden :)
 
TE
B

Biloboy

Benutzer
Mitglied seit
02.10.2001
Beiträge
53
Reaktionspunkte
2
vielen Dank für deinen Kommentar...

Deine Begründung scheint mir logisch. Das Buch welches ich besitze, ist wohl in Sachen RegEx nicht wirklich so super. Dort steht bei diesem Beispiel nämlich:

"Hier muss genau eine oder keine 2 vorhanden sein, also nur 1 oder 12 erfüllen diese Bedingung."

Naja, und da soll einer noch sagen, lesen bildet :)
 
T

The_Linux_Pinguin

Gast
Biloboy am 25.05.2007 09:21 schrieb:
Das Buch welches ich besitze, ist wohl in Sachen RegEx nicht wirklich so super.

Schnapp dir ein Exemplar von http://www.oreilly.com/catalog/regex/ ;)
 
Oben Unten