kostenloser Webspace werbefrei: lima-city


Regex: Alles ausser

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    beph19

    beph19 hat kostenlosen Webspace.

    Hallo zusammen,
    Ich darf mich mal wieder mit Regex herumschlagen und komm grad nicht weiter...
    Nun zu meinem Problem:
    Ich habe einen String z.B.
    abc [var:tmp>4?{setvar:tmp:6}:tmp = {getvar:tmp}] def
    (brauche ich als Bedingungen ([]-Klammern) und Anweisungen ({}-Klammern) in einem Programm).
    Nun brauche ich einen Regex, mit dem ich von innen nach aussen die Bedingungen abarbeiten kann, und anschliessend die Anweisungen. Dies wäre ja eigentlich kein Problem mit den beiden Regex:
    \[(var|item)[^\[\]]*\?[^\[\]]*:[^\[\]]*\]
    und
    \{(setvar|changevar|remi|givei|addi|resetv|getvar):.*\}

    Nun soll aber die getvar-Anweisung mit den Bedingungen verarbeitet werden, und da steh ich auf dem Schlauch: wie kann ich beim ersten Regex machen, dass innerhalb der []-Klammern kein {getvar:.*} vorkommen kann? Dass keine []-Klammern innerhalb vorkommen, kann ja einfach mit [^\[\]] gelöst werden, aber wie löse ich das andere Problem?

    Vielen Dank und Gruss
    BePh19

    Beitrag zuletzt geändert: 6.4.2013 15:08:27 von beph19
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wie soll denn das Ergebnis sein? Ich verstehe nicht wirklich, was Du erreichen willst.
    Habe mal geschaut, wie man ohne ein Pattern matchen kann, aber ich denke, Du wirst es mit mehreren Regexs einfacher lösen können.
    Beschreib bitte erst einmal das gewünschte Ergebnis.
  4. Autor dieses Themas

    beph19

    beph19 hat kostenlosen Webspace.

    Mit dem ersten Pattern soll im Beispiel
    abc [var:tmp>4?{setvar:tmp:6}:tmp = {getvar:tmp}] def
    beim ersten Durchgang {getvar:tmp} gefunden werden. Dies wird dann ersetzt, und im zweiten Durchgang soll alles in den []-Klammern gefunden werden. Das {setvar:tmp:6} wird anschliessend mit dem 2. Pattern gefunden (das ist kein Problem).

    Ich versuche mal, das Problem zur besseren Verständlichkeit anders zu beschreiben:
    Wie kann man mit Regex eine Zeichenfolge finden, die z.B. mit 2 beginnt und mit 4 endet, die jedoch nicht die Zeichen a, d sowie nicht die Zeichenfolge bcbc beinhaltet. Ohne das "Zeichenfolgen-Problem" könnte man ja 2[^ad]4 verwenden, aber dann würde auch 2ccbcbc4 gefunden, was nicht erwünscht wäre.
  5. Hi,

    beph19 schrieb:
    Wie kann man mit Regex eine Zeichenfolge finden, die z.B. mit 2 beginnt und mit 4 endet, die jedoch nicht die Zeichen a, d sowie nicht die Zeichenfolge bcbc beinhaltet.
    mit negative lookahead. Für deine Frage sollte
    2(?!.*bcbc|.*a|.*d).*4
    passen. Weitere Diskussion dazu findest du z.B. hier oder dort.

    Gruß
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!