OT: Regulärer Ausdruck gesucht
Carola Kummert
carola.kummert at uni-bielefeld.de
Wed Nov 17 13:41:33 CET 2004
On Wed, 2004-11-17 at 13:03, Ralf Gesel|ensetter wrote:
> Am Mittwoch, 17. November 2004 09:18 schrieb Christian Weddeling:
> > ich benötige zum Parsen einer Zeile einen regulären Ausdruck der
> > Leerzeichen matcht ausßer wenn sie zwischen Anführungszeichen stehen.
> > Könnte mir einer so einen Ausruck eben schnell zusammenbauen?
>
> was meinst du mit "zwischen anführungszeichen" - kannst du da ein bsp.
> nennen? ich sehe 2 interprestationsmöglichkeiten:
exakt eine. csv-output von Excel is da nen typischer Kandidat fuer. Btw,
im Zweifelsfall mal gucken, ob die csv-Funktionen der $sprache_der_wahl
weiterhelfen.
gesucht wird hier laut Anforderung
dies "ist ein" string mit leerzeichen, "die aber ganz verschieden"
interpretiert werden
dabei werden ausschlieszlich die leerzeichen in "ist ein" und "die aber
ganz verschieden" uebergangen, alle anderen werden in irgend einer Form
gematched und dann verbraten.
Insofern hilft da ein greedy oder aehnliches so ziemlich gar nix, es sei
denn, man formuliert auch da ueber RegEx eine mehrstufige Anfrage. Das
wiederum ist dann aber aehnlich langsam und elegant, als wenn man das
gleich ueber eine Schleife mit entsprechender Logik abhandelt.
(noch nen Tick schneller als meine Loesung davor: matchen bis zum
jeweils naechsten "; jeweils mitzaehlen, bei allen ungeraden Nummern mit
allen Leerzeichen irgendwas machen, bei geraden Nummern nur die Position
merken und weitersuchen. Beim naechsten Treffer (oder EOS) wieder alle
Leerzeichen zwischen dem aktuellen Stoppunkt und dem eben gemerkten
behandeln ... spart ne Zeile Source und ist mindestens doppelt so
schnell ;)
$i = 0; $counter1 = 0; $counter2 = 0;
while(TRUE) {
$counter2 = strpos('"', $string, $counter1);
if($counter2 === FALSE) {
[mache irgendwas mit allen leerzeichen zwischen $counter1 und
$counter2]
break;
}
++$i;
if ($i % 2 == 1) {
[mache irgendwas mit allen leerzeichen zwischen $counter1 und
$counter2] }
$counter1 = $counter2;
}
(okay, das war jetzt nen Tick $lieblingssprachenlastig, aber sollte sich
gut in andere Sprachen uebersetzen lassen ...)
HTH
Carola 'Sammy' Kummert
More information about the Linux
mailing list