feuerteufel
Goto Top

Problem mit preg match

Hallo, ich habe eine Frage zu preg_match und deren Suchmuster. Ich kann googlen wie ich will, aber man findet immer nur die Standart-Suchmuster mit denen ich nichts anfangen kann.

Ich habe eine Zahl (String) von bis nach dem Muster '12-16' und ich möchte einmal die 12 und einmal die 16 in zwei verschiedene Strings/Variablen schreiben.

Nun dachte ich mir, mit preg_match geht das ganz einfach, in dem man einmal die Zeichenfolge vor dem - und einmal die Zeichenfolge nach dem - in eine Variable speichert.

if (preg_match("/(.*?)\-/i", $startvariable, $ausgabe1)) $erster_wert = $ausgabe1[1]; //funktioniert!  
if (preg_match("/-(.*?)", $startvariable, $ausgabe2)) $zweiter_wert = $ausgabe2[1];  // <--- funktioniert nicht!  

Der erste Wert funktioniert. Ich habe in der Variable die '12'.

Aber beim der zweiten Wert kann ich alles anstellen was ich will, an der Zeile habe ich schon alles mögliche ausprobiert. Mit / \ und ^ sovie das minus in eckige klammern setzen oder runde klammern, mit und ohne /.... über Stunden hinweg.

Ich kriegs einfach net hin. Kann mir jemand erklären was ich falsch mache und warum das mit dem - nicht funktioniert - immerhin funktioniert es wenn ich anstelle des - nach einem Wort suche. Also mit Buchstaben hat er dort kein Problem, nur mit dem minus.

Ich will lediglich die Zahlen nach dem minus in eine Variable $zweiter_wert speichern.... das kann doch net so schwer sein.

Gruß
Niklasg

Content-Key: 129381

Url: https://administrator.de/contentid/129381

Printed on: April 24, 2024 at 18:04 o'clock

Member: dog
dog Nov 14, 2009 at 19:29:04 (UTC)
Goto Top
Ich sehe hier wieder mal das Problem nicht:

<?php

	$input = '12-16';  

	if(preg_match('/^(\d+)-(\d+)$/', $input, $match))  
		var_dump($match);

?>

array(3) {
  =>
  string(5) "12-16"  
  [1]=>
  string(2) "12"  
  [2]=>
  string(2) "16"  
}
Member: FeuerTeufel
FeuerTeufel Nov 14, 2009 at 19:55:36 (UTC)
Goto Top
Danke!
Es funktioniert perfekt.

Warum es aber so funktioniert, habe ich noch nicht verstanden*gg*. Es ist leider auch nirgendwo erklärt für was die einzelnen Symbole und Zeichen stehen.

Aber das Problem ist gelöst;)

Gruß
Niklasg
Member: dog
dog Nov 14, 2009 at 20:04:36 (UTC)
Goto Top
Eigentlich gibt es so viele Erklärungen zum Thema Regexen, dass man sich damit Jahre befassen könnte, aber mal ganz langsam:

/ - Das Zeichen leutet eine Regexp ein und auch wieder aus, alternativ hätte man auch @,# verwenden können - das entsprechende Zeichen muss innerhalb der Regex escapt werden
^ - Bezeichnet den Anfang einer Regex, d.h. die Exe muss am Anfang der durchsuchten Zeichenkette zutreffen
() - Die Klammern sorgen u.A. dafür, dass ein Treffer in den match-Array exportiert wird!
\d - Das ist ein Regex-Feature und trifft nur auf Zahlen zu, alternativ ginge auch [0-9]
+ - Das ist ein Quantitifier und beudetet "1 oder mehr"
$ - Das Zeichen steht für das Ende, d.h. im durchsuchten String darf jetzt nichts mehr kommen.
Member: FeuerTeufel
FeuerTeufel Nov 15, 2009 at 00:56:44 (UTC)
Goto Top
Danke für die Erklärungen dazu. So kann man es besser verstehn und lernen;)