RegExp *auf schlauch steh*

Bash, Shell, PHP, Python, Perl, CGI
tdad
Posts: 5
Joined: 2004-06-05 15:03

RegExp *auf schlauch steh*

Post by tdad » 2004-06-29 20:27

hi folks,


ich steh grad ein bisl aufm schlauch.

mein problem:

ich habe einen string, der durch doppelpunkte als trenner per preg_split getrennt werden soll.

dabei soll er aber doppelpunkte ignorieren, denen ein vorangestellt ist.

mein ansatz:

Code: Select all

$atoms	= preg_split('([^\]:)',$data); 
das problem dabei ist, dass er dann zwar brav die : in ruhe lässt, dafür aber jede zeile um ein zeichen kürzt.

sieht jemand meine inkompetenz bzw. den fehler? ;-)

marsupilami
Posts: 20
Joined: 2004-01-31 19:13
Location: Böblingen

Re: RegExp *auf schlauch steh*

Post by marsupilami » 2004-06-29 21:08

Hm ist ganz klar!
Dazurch das du sagst das [^\] dem doppelpunkt nicht vorrangestellt werden darf, splitet er bei allen anderen buschstaben doppelpunkt kombis.

das heißt ob da "d:","3:" oder "!:" steht, genau dort wird gesplitet. Das heißt das letzte zeichen fällt immer weg, das es ja als trennzeichen angesehen wird.

Konnte es drehen wie ich es wollte, aber war für mich nicht möglich dies allein durch preg_split zu lösen.

Code: Select all

<?php
$data = "Alle meine entchen : oder nicht: oder doch nicht: oder doch!:klar!";
$atoms   = explode(":",str_replace("\:","Ã?",$data));
foreach($atoms as $k => $v) $atoms[$k] = str_replace("Ã?","\:",$v);
?>
das wäre eine alternative, das das zeichen Ã? (O mit welle oben drauf) in unserem Wortschatz nicht vorkommt, jedoch ein ASCII zeichen ist.

wirsing
RSAC
Posts: 611
Joined: 2002-11-20 21:32
Location: Vaihingen und Karlsruhe

Re: RegExp *auf schlauch steh*

Post by wirsing » 2004-06-29 22:09

EDIT: Mit Vorherbehauptungen funktioniert es, wenn man es richtig macht. Meine beiden vorigen Versuche waren falsch. Also jetzt:

Code: Select all

$atoms	= preg_split('((?<!\):)',$data); 

tdad
Posts: 5
Joined: 2004-06-05 15:03

Re: RegExp *auf schlauch steh*

Post by tdad » 2004-06-30 00:32

@marsupilami

ja...so hatte ich es zwischenzeitlich auch gedreht, allerdings mit

Code: Select all

$extreme_dirty_item = '-#{[~|$&$|~]}#-';
statt Ã?

;D fand ich aber ein bisl dreckig.


@wirsing
vielen dank. ich sehe schon, ich muss da nochma ein bisl nachsitzen.....es funzt *freu*