Array
(
(0) => test3
(1) => test4 test5
(2) => test6
)
|
|
|
hi, wenn Dein Ergebnis richtig ist, verstehe ich die Regel nicht.. wäre nicht test2, test3 und test5 die vollständige Menge?
– Woboroz 10.09.2009
|
||
| 1 |
Nein, er will NUR teilstrings herausholen, die NACH dem ERSTEN not oder nicht stehen und alle nach weiteren not oder nicht.
– Dustin Klein 10.09.2009
|
$str = "test1 test2 nicht test3 nicht test4 test5 not test 6";
$array = preg_split("/ (not|nicht) /", $str, -1, PREG_SPLIT_NO_EMPTY);
array_shift( $array );
print_r( $array );
Array
(
[0] => test3
[1] => test4 test5
[2] => test 6
)
|
|
| 1 |
test5 ist ja ebenso ein wort nach einem not oder nicht, nur eben als verbund mit test4, da ja "not 'test4 test5'" in ein Array Element rutschen.
– Dustin Klein 10.09.2009
|
|
| 1 |
Ich denke, daß das interpretierbar ist.
Genau genommen steht test5 nicht direkt hinter einem nicht oder not, sondern nur indirekt. Die "richtige" Lösung hängt also davon ab, ob man nur die direkten Wörter, oder auch alle indirekten Wörter haben will. – lunatigs 10.09.2009
|
...
preg_match_all('/
(?:not|nicht) # vorne soll "not,nicht" stehen,
(.+?) # dann kann stehen was will,
(?=not|nicht|$) # bis irgendwann "not,nicht,ende" kommt
/x',
$string,
$matches
);
...
|
|
$array = preg_split(" (not|nicht)", $zeichenkette, -1, PREG_SPLIT_NO_EMPTY)array_shift($array)
$array1 = preg_split("^*(not|nicht) ", $zeichenkette, 1, PREG_SPLIT_NO_EMPTY)
$array2 = preg_split(" (not|nicht) ", $array1, -1, PREG_SPLIT_NO_EMPTY)|
|
$array = split ( ' not ', $zeichenkette);
|
|
|
Solang Du nur so einfache Sachen wie not nimmst, reicht auch ein $array = explode(' not ',$zeichenkette);
split ist natürlich schöner, wenn Du irgendwann mal reguläre Ausdrücke mit reinnehmen willst. – lunatigs 10.09.2009
|
||
| 1 |
Reguläre Ausdrücke sind sowas von dermaßen überbewertet, das geht auf keine Kuhhaut.
– Bombe 10.09.2009
|
|
| 1 |
Finde nicht, dass regex überbewertet sind. Halte sie für sehr sinnvoll und sie erleichtern die Arbeit enorm, wenn man sich die Mühe macht regex zu verstehen :)
– Dustin Klein 10.09.2009
|
|
|
Das hängt ja wohl mal stark davon ab, zu was man sie nutzt. In diesem Fall ist es wohl mit Kanonen auf Spatzen scheißen. In vielen Fällen erspart einem RexEx aber ne Menge Arbeit.
– lunatigs 10.09.2009
|
||
| 1 |
Hi, erstmal danke, nur wenn ich es so splitte oder explode habe ich als ersten key/value im Array "test1 test2", was aber nicht richtig ist.
Denn ich will alle Wörter nach einem NICHT oder NOT und nicht die Wörter die davor sind im Array. Deswegen wollte ich Regular Expressions verwenden, die Funktion explode oder Split sind mir nicht unbekannt, helfen mir in diesem Fall aber nicht wirklich. :( – BiX 10.09.2009
|
|
|
Was spricht denn dagegen nach dem split bzw. explode das erste Array-Element einfach rauszuschmeissen? -> array_shift($array);
– -armin- 10.09.2009
|
||
| 1 |
Gar nichts armin, es hätte mir nur einfach besser gefallen wenn von Haus aus gleich die richtigen Werte drinnen stehen ohne das ich irgend was rausputzen muss.
– BiX 10.09.2009
|
|
| 1 |
Ahhh, du bist wohl auch so ein Perfektionist bei dem der code "most elegant" sein muss? Geht mir ähnlich ;o)
– -armin- 10.09.2009
|
$array = split ( ' (nicht|not) ', $zeichenkette);
|
|
|
unset($arr[0]); halte ich an der Stelle für falsch. Damit finge dann das Array bei 1 an und nicht bei 0, wenn ich das richtig sehe. Daher wär ein array_shift($arr); wohl besser. Korrigiert mich, wenn ich da falsch liege :)
– lunatigs 10.09.2009
|
||
|
ist es schlimm wenn ein array mit 1 anfängt ?
ich benutze gerne assoziative Arrays, die fangen dann gerne mal mit was ganz anderem an. – MiW 10.09.2009
|
||
|
Schlimm ist das nur, wenn Du z.B. das Array numerisch in einer Schleife durchgehst, die bei 0 startet.
Da das Array in der Frage eindeutig numerischer Natur ist, hab ich gedacht ich erwähn das mal besser, wenngleich man das auch assoziativ handhaben könnte. – lunatigs 10.09.2009
|
||
|
Würde auch zu einem foreach raten. Generell bin ich aber auch dafür natürliche Arrays zu benutzen, die generell bei 0 anfangen. Ansonsten muss sehr gut dokumentiert werden, wo das Array beginnt und wieso!
Generell ist das Problem aber durch ein foreach gelöst ;) – Dustin Klein 10.09.2009
|
||
|
Ich benutze Arrays eher als eine Art Collection und greife selten seriell darauf zu. Es sei denn ich nutze sie als queue oder stack aber dann sind die indizes ja auch wurscht, wenn man mit push und pop arbeitet.
– MiW 11.09.2009
|