Archiv verlassen und diese Seite im Standarddesign anzeigen : regexp
Hallo allerseits,
folgendes Problem:
ich habe einen string "info typ=GEZ spielart=LOTTO 6 aus 49, Samstag spielartk=LOSA asdat=11.09.2004" , den mittels regulärem Ausdruck zerlegen will.
$fields=preg_split("/ \b\w*=/ ",$str);
unter Perl funxt dieser ausdruck genau, under php nicht...
:confused:
habt ihr eine bessere Idee?
als ergebnis hätte ich gern ein array mit folgenden Einträgen:
info
typ=GEZ
spielart=LOTTO 6 aus 49, Samstag
spielartk=LOSA
asdat=11.09.2004
noch eins vorab: ja, das ist ein Teil eines XML-Stings, den ich vorsätzlich nicht mit dem XML-Parser auseinandernehmen will, da ich das Script als Beispiel weitergeben will und ich nict weiss wie die php-version bei meinen partner(n) aussieht.
undefined
17-09-2004, 09:58
Also ich glaube nicht das es so auch auf Perl funktioniert hat ;) Oder wo hast du dir mehreren Leerzeichen matches ? ;)
Dein Problem wird werden die Leerzeichen zu matchen. Arbeite am besten mit Backrefenzen, hier ein Einstieg ohne Backreferenz ;)
<?php
$string = "info typ=GEZ spielart=LOTTO 6 aus 49, Samstag spielartk=LOSA asdat=11.09.2004";
$new = preg_match_all("/([\w|\d]+=[\w|\d|\.]+)/", $string, $out, PREG_SET_ORDER);
echo "<pre>";
echo $string . "<br/>";
print_r( $out );
echo "</pre>";
?>
Oder Willst du immer genau vor dem tagnamen Brechen?
Danke erstma!
funxt dennoch nicht wirklich...
...naja.
unter perl funxt das hier:
#!/usr/bin/perl -w
$xd="info typ=GEZ spielart=LOTTO 6 aus 49, Samstag spielartk=LOSA asdat=11.09.2004";
print $xd."\n";
$xd=~ s/ \b\w*=/X/g;
print $xd."\n";
Ausgabe:
info typ=GEZ spielart=LOTTO 6 aus 49, Samstag spielartk=LOSA asdat=11.09.2004
infoXGEZXLOTTO 6 aus 49, SamstagXLOSAX11.09.2004
Der Ausdruck findet genau das was ich suche, nähmlich leerzeichen+wortanfang+beliebig viele zeichen+"=" und tauscht diese gegen "X"
nur in php wills nicht...
Oder Willst du immer genau vor dem tagnamen Brechen?
ja genau das...
mit ein wenig rtfm und nachdenken hab ichs hinbekommen:
1. der string sieht etwas anders aus, ich entferne die Hochkommas später... :rolleyes:
info typ="GEZ" spielart="LOTTO 6 aus 49, Samstag" spielartk="LOSA" asdat="11.09.2004"
2. so sieht der ausdruck fürs splitten aus:
$exp="/\b\w+=\".*\"/U";
$elmcnt=preg_match_all($exp, $lines[$i], $df_arr);
@undefined
danke, deine idee hat insoweit geholfen, daß ich preg_match_all statt ...split verwende. ist einfacher... :D :D
undefined
17-09-2004, 15:19
Nun ja, Das Problem bei Regex und PHP liegt eher beim System. Unter Windows gehen viele Befehle schon mal garnicht. Und wenn PHP ohne Posix unterstützung Kompiliert wird dann fehlen eine Paar Sinnvolle Features ;)
Hier aber mal wie ich es machen würde Jedoch keine Backreferenz um Prozesse zu sparen sondern einfach vorschauend.
$string = "info typ=GEZ spielart=LOTTO 6 aus 49, Samstag spielartk=LOSA asdat=11.09.2004";
$new = preg_split("/(\s(?>\w+=))/i", $string, 0);
echo "<pre>";
echo $string . "<br/>";
print_r( $new );
echo "</pre>";
mfg undefined
wie schon gesagt , "danke" ;)
posix: natürlich verwende ich mein php unter linux... :cool:
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.