Regulärer Ausdruck

  • Ich möchte ein Wortfragment mit einer Liste vergleichen, so ein Wortfragment sieht bei mir z. B. so aus:
    Gen**i***

    die Sternchen zeigen die Unbekannten an. Als Ausgabe sollen Wörter erfolgen die zum Wortfragment passen z. B.:
    Genetiker
    Generisch

    Der reguläre Ausdruck soll nun ein Wort mit dem Wortfragment vergleichen und schauen ob dieses Wort eine gültige Möglichkeit ist.
    Hat der wer zufällig so einen regulären Ausdruck parat :) ? Wenn nicht hat wer eine Idee wie man es anders machen könnte?

  • Joa brauch ich für ein Programm ;)

    Hab noch ein Problem
    ich habe einen String wo auf jeden 2x '>' drin vorkommt.
    Mit welchen regulären Ausdruck kann ich alle Zeichen davor und die '>' selbst markieren, möchte sie nämlich mit StringRegReplace ersetzen.
    Mit [^>] wird irgendwie gar nix ersetzt :( obwohl die darin vorkommen.

    edit: Ok Fehler beim coden, aber jetzt ersetzt [^>] alles außer '>' was irgendwie nicht Sinn und Zweck der Sache sein soll >_>
    edit2: Rechtschreibung. Man merkt das es spät wird.

    Einmal editiert, zuletzt von Wesloth (8. September 2008 um 23:07)

  • Danke funktioniert.
    Aber ich verstehe nicht ganz warum
    . = Jedes Zeichen außer Umbruch
    + = Vorherige Zeichen nochmal
    > = >
    Bsp:
    blub>bla>
    b = jedes zeichen also weiter. Jetzt kommt das + also wieder beliebiges Zeichen ( l also weggeparsed ) und dann > ( u != > )..., was aber wenn das 2. zeichen das '>' wäre ( z. B. b>ub) würde das nicht dann durch das + auch mitgenommen werden.
    Ach ich versteh nicht die Logik hinter der Ausführung. Was kommt zuerst und was genau wird sich angeguckt...

    • Offizieller Beitrag

    OK, mal ausführlich:
    . - jedes beliebige Zeichen
    + - gibt Wiederholungsmöglichkeit an, min. 1-mal bis beliebig oft ==> sollte > auch als erstes Zeichen erscheinen können, müßte man * verwenden, das steht für 0-mal bis beliebig oft
    > - jetzt muß ein > folgen, damit Übereinstimmung mit Suchmuster besteht - folgt im Suchstring ein weiteres > , dann ist das erste > ja nicht das abschließende und wird somit als beliebiges Zeichen interpretiert.

    Etwas Anderes ist es, wenn du noch weitere > im Suchstring hast, aber nur bis inklusive des zweiten selektieren wolltest.
    Dann müßtest du ein Pattern erstellen, dass in einem Match jeweils alle Zeichen bis zum zweiten > erfaßt. Es gibt dann mehrere Matches im Suchstring, aber der erste enthält dann den zu selektierenden Bereich.
    Das wäre das Pattern dafür: (([^>]*)>){2}
    Auch hier die Erklärung:
    [^>] - Gruppe zum Match für jedes Zeichen außer >
    ([^>]*) - alle Zeichen außer > können 0-mal bis beliebig oft auftreten
    (([^>]*)>) - diesem Match muß ein > folgen
    (([^>]*)>){2} - dieser Match muß 2-mal hintereinander folgen (beliebige Zeichen - > - beliebige Zeichen - >)