PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einfachster regulärer Ausdruck


x-behind
25.08.2009, 12:09:20
Hallo an alle,

ich habe meine Probleme damit mithilfe eines regulären Ausdrucks folgendes zu machen:

Aus einem "test=true" oder "user=12" oder "wasAuchImmer=wertWieAuchImmer" sollen alle Zeichen VOR dem Gleichzeichen und alle Zeichen oder Zahlen NACH dem Gleichzeichen in ein Array gepackt werden. Das Gleichzeichen ist mir daher total egal.

Am Ende soll sowas zu sehen sein: ARRAY[ersterWert] = zweiterWert

Kann mir jmd einen Tipp geben, wie ich diese Aufgabe lösen kann?

LG

DokuLeseHemmung
25.08.2009, 12:15:39
z.B. mit parse_ini_file() oder parse_ini_string()

x-behind
25.08.2009, 12:23:24
Danke für deinen Beitrag,

nur leider kann ich parse_ini_string() nicht ausführen, da mir kein PHP 5 zur Verfügung steht, und parse_ini_file() ist für meinen Zweck nicht ausreichend genug.

Die Werte stammen aus einem String und sollten nicht vorher erst in eine Datei gespeichert werden -_-

DokuLeseHemmung
25.08.2009, 13:13:10
da mir kein PHP 5 zur Verfügung steht
1und1?
Das kannst du umstellen!
PHP4 ist tot.

mithilfe eines regulären Ausdrucks
Auch wenn das geht, ist doch der Weg über explode() übersichtlicher und für dich auch wohl einfacher.

x-behind
25.08.2009, 13:23:30
Explode() führt allerdings dazu:

Array
(
[0] => test=true
[1] => bla=bla
)

Ich brauche es aber so:


Array
(
[test] => true
[bla] => bla
)

DokuLeseHemmung
25.08.2009, 14:10:11
Explode() führt allerdings dazu:
Das ist doch schon mal schön!

Was hindert dich daran explode nochmal, und dann in einer Schleife, anzuwenden?

vt1816
25.08.2009, 14:32:33
Was hindert dich daran explode nochmal, und dann in einer Schleife, anzuwenden?

... nun schreib ihr/ihm doch schon die Funktion! ;-)

x-behind
25.08.2009, 14:43:49
Was hindert dich daran explode nochmal, und dann in einer Schleife, anzuwenden?

Die fehlende Idee. Ich habe das nun so umgesetzt:

function splitURL(){
// Reduzierung der URL
$formatURL = substr( strstr($this->url, "?") , 1);

$urlArray1 = explode('&',$formatURL) ;
$urlArrayLength = count($urlArray1);

for($i=0; $i<$urlArrayLength; $i++){
$urlArray2[$i] = explode("=", $urlArray1[$i]) ;
// Endgültiges Array in Objekt Variable übertragen
$this->arrayGetParameter[$urlArray2[$i][0]] = $urlArray2[$i][1];
}
}

Die Ausgabe sieht so aus:

Array
(
[site] => login
[user] => 12
[weather] => rain
)

Das ist zwar ganz nett, aber ich denke mir, dass eine Lösung mit einem regulärem Ausdruck deutlich eleganter aussieht. Dennoch danke für deine Hilfe DokuLeseHemmung ^^

... nun schreib ihr/ihm doch schon die Funktion! ;-)
Danke, das kann ich auch selbst. Ich war halt eigentlich nur auf der Suche nach einer Lösung mit einem regulärem Ausdruck.

DokuLeseHemmung
25.08.2009, 14:58:28
... nun schreib ihr/ihm doch schon die Funktion! ;-)
Nein, so dull bin ich nicht! (zumindest nicht immer)
Im folgenden gibts auch einen der möglichen Gründe in Reinform.. :-)


// Reduzierung der URL
Das hättest du vorher schon mal erwähnen können!
http://de2.php.net/manual/de/function.parse-url.php
http://de2.php.net/manual/de/function.parse-str.php

vt1816
25.08.2009, 15:01:07
Das hättest du vorher schon mal erwähnen können!
http://de2.php.net/manual/de/function.parse-url.php
http://de2.php.net/manual/de/function.parse-str.php

Wäre ja auch zu leicht gewesen gleich die Katze aus dem Sack zu lassen...

Und auch die *_split()-Funktionen (http://de.php.net/manual/de/function.preg-split.php) sind bei solchen Problemstellungen ganz nett.

x-behind
25.08.2009, 15:07:58
Das hättest du vorher schon mal erwähnen können!


Ich wollte halt was halbwegs alleine machen ;)

parse-url() ist mir viel zu unflexibel, weil ich man dabei feste Werte nutzen muss.
parse_str() kannte ich bis jetzt gerade noch nicht, naja.. zu spät ^^
preg_split() wollte ich ja eigentlich auch benutzen, aber dafür braucht man einen richtigen regulären Ausdruck, den ich nicht hinbekommen habe.

DokuLeseHemmung
25.08.2009, 15:25:17
Welche unflexiblen Werte meinst du?

Und oben sage ich doch schon ansatzweise, dass ich es für unangemessen halte, deine Arbeit zu erledigen, wenn doch:
1. ich es für den falschen Weg halte
2. es vorgefertigte hochspezialisere Funktionen extra für diesen Zweck gibt

x-behind
25.08.2009, 15:27:09
Wer hat denn was davon gesagt, dass du meine Arbeit erledigen sollst?

Ich bin zufrieden so, danke für die Hilfe.

cortex
26.08.2009, 08:56:29
PHP4 ist tot.

aber sowas von...

aber ich denke mir, dass eine Lösung mit einem regulärem Ausdruck deutlich eleganter aussieht.

ein regulärer ausdruck ist an dieser stelle völlig unangebracht / unnötig. mit den vorgeschlagenen methoden kommt man sparsamer ans ziel.

cx

x-behind
27.08.2009, 23:48:48
Vielen Dank für den Hinweiß.

x-behind
28.08.2009, 12:47:53
mit den vorgeschlagenen methoden kommt man sparsamer ans ziel.

Mir lässt das keine Ruhe.

Ich habe an der Uni gelernt, dass reguläre Ausdrücke aufgrund der formalen Sprache nicht nur unglaublich vielseitig einsetzbar sind, sondern auch noch so ziemlich die schnellste Möglichkeit darstellt, mit Text umzugehen.

Warum soll der Einsatz von regulären Ausdrücken an dieser Stelle langsamer sein, als die iterative Lösung?

DokuLeseHemmung
28.08.2009, 13:31:11
Probiers doch einfach aus....

Und nein, ich würde nicht auf die Idee kommen, eine gut funktionierende Funktion durch irgendeinen Eigenbau zu ersetzen. Wozu auch?

Tipp am Rande:
Die vorgefertigten Räder aus der Industrie sind meist runder, als die selbstgeschnitzten.

x-behind
28.08.2009, 14:50:21
Um das mit deinem Beispiel auszudrücken, warum ich eher auf eine schlankere eigene Lösung stehe: Manchmal braucht man es einfach nicht so rund, wie es die Industrie machen würde.

Ich werde das Testen. Welche Lösung ist wie schnell? Vorgegebene, iterative oder reguläre Methoden?

Ich melde mich dann wieder.

LG