Hallo Leute,
Ich suche eine Regular Expression (PHP), die folgendes macht:
'foobar', 'foo, bar', foo, bar
soll zu so einem array werden:
foobar foo, bar foo bar
Weiß jemand, wie ich das hinkriege?
Bearbeitet von blackbird:
Fehler ausgebessert
Anmeldungsdatum: Beiträge: 3396 Wohnort: Hermagor, Kärnten - Österreich |
Hallo Leute, 'foobar', 'foo, bar', foo, bar
foobar foo, bar foo bar Weiß jemand, wie ich das hinkriege? Bearbeitet von blackbird: Fehler ausgebessert |
Anmeldungsdatum: Beiträge: 196 |
Erste Idee wäre explode, aber dann hättest du im ersten Teil ('foobar') noch die Anführungszeichen. Müsstest eben mit nem foreach-loop rauslöschen. Sid |
(Themenstarter)
Anmeldungsdatum: Beiträge: 3396 Wohnort: Hermagor, Kärnten - Österreich |
Sidney hat geschrieben:
Das hab ich schon. Ich würde es nur gerne als regex haben, weil meine Methode ist arschlangsam. 😳 Hier der Quelltext: function split_arguments($argument_string) { $arguments = array(); $current_argument = ''; $inside_argument = false; for ($i = 0; $i < strlen($argument_string); $i++) { $char = substr($argument_string, $i, 1); if ($char == '\'' && !$inside_argument) { $current_argument = ''; $inside_argument = true; } elseif ($char == '\'' && $inside_argument) { $arguments[] = $current_argument; $inside_argument = false; $current_argument = ''; } else { $current_argument .= $char; } } return $arguments; } Bearbeitet von blackbird: Quelltext hinzugefügt |
Anmeldungsdatum: Beiträge: 377 |
Sind reguläre Ausdrücke nicht auch langsam? |
(Themenstarter)
Anmeldungsdatum: Beiträge: 3396 Wohnort: Hermagor, Kärnten - Österreich |
Gizmo hat geschrieben:
Aber schneller als Zeichenweise durch einen Text zu wühlen. |
Anmeldungsdatum: Beiträge: 66 Wohnort: $HOME |
Hmm ... soweit ich weiss, ist das mit RegExen nicht lösbar, weil du keinen Status mitziehen kannst (also ein Komma in einem String nicht wirklich von einem anderen Komma unterscheiden kannst). 'foobar','foo, bar','foo','bar'
$werte = "'foobar','foo, bar','foo','bar'"; $array = preg_split("/'\s*,\s*'/", substr($werte, 1, -1));
HTH |
(Themenstarter)
Anmeldungsdatum: Beiträge: 3396 Wohnort: Hermagor, Kärnten - Österreich |
drunkVoodoo hat geschrieben:
Das habe ich auch bei meiner Methode als Problem. Danke für deinen Quelltext. Ich werde ihn testen wenn ich zu Hause bin. 😉 |
Anmeldungsdatum: Beiträge: 68 |
Wieso gehst du nicht gleich einen Schritt weiter und trennst die Elemente mit einem anderen Zeichen? Das Problem besteht ja nicht nur darin, dass es anscheinend Texte gibt, die auch einen Beistrich beinhalten, sondern auch darin, dass manche User dann sowohl einen Beistrich als auch ein Leerzeichen schreiben, andere wiederum nur einen Beistrich und kein Leerzeichen. Nimm ein Zeichen, das garantiert nicht im Text vorkommen wird, und benutze es als Separator, etwa : oder # oder -. Mittels des Separators kannst du dann ohne Aufwand ein explode durchführen. Beispiel mit ":" $werte = "foobar:foo, bar:foo:bar"; $arr = explode (":", $werte); MaV |
(Themenstarter)
Anmeldungsdatum: Beiträge: 3396 Wohnort: Hermagor, Kärnten - Österreich |
Ich verwende das für mein StormCatWiki. <PARSERNAME('parameter1', 'parameter2')> dieser Teil wird auch an den Parser übergeben </PARSERNAME>
$parser['arguments'] = array('parameter1', 'parameter2'); $parser['body'] = 'dieser Teil wird auch an den Parser übergeben'; Und Parameter trennt man normalerweise mit einem Beistricht. |
Anmeldungsdatum: Beiträge: 68 |
blackbird hat geschrieben:
Ah, na bei Parametern ist es klar. Da gefällt mir die Lösung von drunkVoodoo ganz gut. Der Beistrich war nur eine denkbare Möglichkeit. MaV |
(Themenstarter)
Anmeldungsdatum: Beiträge: 3396 Wohnort: Hermagor, Kärnten - Österreich |
Kleines Update. Bleibe aber vorerst bei meiner Funktion, weil dort einfach nur Texte in Anführungszeichen verwendet werden und die außenstehenden Wörter und Zeichen einfach ignoriert werden. |
Anmeldungsdatum: Beiträge: 66 Wohnort: $HOME |
blackbird hat geschrieben:
Tatsächlich ... blackbird hat geschrieben:
Ist ja auch nicht umsonst die "offizielle" Methode ☺ |