Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Hilfe bei RegExp

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719

    Hilfe bei RegExp

    Hallo,
    ich versuche jetzt seit zwei Tagen einen regulären Ausdruck zu basteln, der folgende Eigenschaften hat:

    Er soll auf ein NewLine (\n) passen, wenn vor dem newLine KEIN Backslash war, der das newline escaped, aber doch,
    wenn zwei Backslashes davor sind ( Backslash wird escaped ).

    Mein Versuch dazu sieht so aus:

    Code:
    ^(?!\\) *\n$
    Der hat den Nachteil, dass er nie passt.

    Dabei hab ich mir gedacht: (?!\\) sagt ja, wenn kein Backslash vor Leerzeichen beliebiger Menge links vom newline ist. Das sind zwei Backslashes, weil das aus einem C++-Quelltext ist. Nicht das sich jemand wundert. Das der Backslash escaped werden kann, ist in dem Ansatz noch nicht mit drinn.
    Ich bin neben der korrekten Lösung für das Problem auch an meinem Denkfehler interessiert, um sowas zukünftig selber lösen zu können. Als Anleitung hab ich die Beschreibung von QRegExp benutzt. Vielleicht ist die nicht so der Hit.


    Vielen Dank im Vorraus.
    Geändert von axeljaeger (11-05-2004 um 17:39 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    26.12.2001
    Beiträge
    228
    so:

    Code:
    /(?<!\\)\\n/
    die '\n' stehen doch als '\n' in der Datei.

    steve
    pornstars-online.de

  3. #3
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Ich danke dir, wüsste aber jetzt gerne noch etwas mehr: Was heist / irgendwas / ? Also zwei Slashes um den Ausdruck? was heist das kleiner-Zeichen hinter dem Ausrufezeichen?

  4. #4
    Registrierter Benutzer
    Registriert seit
    26.12.2001
    Beiträge
    228
    also mit den "/" werden sie Regexes in Perl eingefasst.

    Code:
    (?<!\\)
    das ist ein negatives lookbehind. Also wenn '\n' gefunden wird wird noch geguckt, dass das was darin steht nich vorkommt. (Also das \\)

    steve
    pornstars-online.de

  5. #5
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Oh, ich glaube dann konnte das gar nicht klappen: Ich will das Ding von Qt fressen lassen und da hab ich in der Doku nichts von dem < gefunden. Die Slashes hab ich schonmal versucht wegzulassen, es hat trotzdem nicht so ganz geklappt. Ich hab jetzt eine Lösung, die genau das Gegenteil von dem macht, was ich haben will:
    Code:
    \\\\\\s*\\n
    . Ich suche also nach einem Backslash, danach beliebigem Whitespace und dann nach einem linefeed. Das funktioniert, ist halt nur wie gesagt verkehrt herum: Sagt ja, wenn er ein falschen return gefunden hat und nein, wenn er ja sagen sollte. Das Problem ist wohl schon etwas kniffliger: Wenn ich einfach nach "keinem backslash, beliebigem Whitespace und dann linefeed" suche, findet er das immer: Ein Whitespace ist ja auch kein Backspace.

    Ich hab meine Anforderungen nochmal leicht verändert: Hintergrund der Geschichte ist: Ich möchte schauen, ob eine C++ Preprozessor Befehl mit dem Ende der Zeile abgeschlossen ist, indem ich die RegExp drauffallen lasse. Jetzt hab ich aber herausgefunden, dass man den Backslash selber nicht escapen kann, soll heißen, was ich am Anfang geschrieben habe von wegen zwei Backslashes gelten auch nicht, muss ich wieder zurückziehen. Es ist alllerdings erlaubt, zwischen Backslash und return whitespace zu haben, auch wenn das der G++ mit einer Warning versieht.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •