kostenloser Webspace werbefrei: lima-city


C# Regex Ungreedy

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    vampiresilence

    Kostenloser Webspace von vampiresilence

    vampiresilence hat kostenlosen Webspace.

    Ich hab mal wieder ne Frage im Bezug auf C# und Regex. Mit Regex habe ich schon oft in PHP gearbeitet, nun wollte ich es mal mit C# probieren. Ist ya nun auch nicht soviel anders, allerdings nimmt C# keine Modifier an, sondern gibt diese seperat als RegexOptions-Parameter an. Unglücklicherweise lässt sich in diesem Enumerator kein Modifier für "Ungreedy" finden und "#.#u" nimmt er wie gesagt nicht an.

    Frage also: Wie schaffe ich es, dass der Regex Ungreedy ausgeführt wird ?

    Google liefert zwar Ergebnisse, auf den Seite die kommen, werden weder Greedy oder Ungreedy letztendlich aber nichtmal erwähnt. Hab auch ne Firefox-Dokumentsuche laufen lassen, ich kann also nichts überlesen haben (sicher is sicher).

    Ich hoffe ihr könnt mir helfen.

    Liebe Grüße
    - VampireSilence

    Beitrag zuletzt geändert: 22.12.2009 15:35:31 von vampiresilence
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Hmm... wäre nett, wenn du dein Regex posten könntest. So weiss ich nicht, was du meinst. Kenne Regex nur aus der praktischen Arbeit mit C#.
  4. Autor dieses Themas

    vampiresilence

    Kostenloser Webspace von vampiresilence

    vampiresilence hat kostenlosen Webspace.

    Das Regex wäre:
    <td>(.*)</td>
    Es liest also Tabellendaten aus. Aber wie du dir vorstellen kannst, gibt es einige davon, die ich je trennen möchte und da das Regex greedy ausgeführt wird, bekomme ich nur einen Match, der dann ca. so aussieht:
    **</td><td>**</td></tr><tr><td>**</td><td>**</td><td>**
    Also auch gnadenlos über Zeilen und ganze Tabellen hinweg. So sollte das natürlich nicht sein und das Problem lässt sich bei bspw. PHP so lösen, dass man nen u-Modifier nutzt, was bei C# allerdings nicht möglich ist.

    Habe zwar bei Google und in der MSDN schon nachgeschlagen, aber dort sind auch nur die Modifier vorgestellt, die auch in den RegexOptions enumeriert sind. Nur dass diese eben keine Option für "Ungreedy" enthält.

    Liebe Grüße
    - VampireSilence

    Beitrag zuletzt geändert: 26.12.2009 20:17:31 von vampiresilence
  5. Hallo,
    dein Regex:
    <td>(.*)</td>

    sollte in C# glaube ich so aussehen:
    <td>((<1>[a-zA-Z0-9,.-_; #~+´`?ß=}][&%$§!°]*))</td>

    Das liest du dan wie im Beispielcode aus:
    Regex reg = new Regex("<td>((<1>[a-zA-Z0-9,.-_; #~+´`?ß=}][&%$§!°]*))</td>");
    if(reg.IsMatch(str_code, "<td>((<1>[a-zA-Z0-9,.-_; #~+´`?ß=}][&%$§!°]*))</td>") {
       Match m = reg.Match(str_code, "<td>((<1>[a-zA-Z0-9,.-_; #~+´`?ß=}][&%$§!°]*))</td>");
       textBox1.text = m.Groups[1];
    }

  6. Autor dieses Themas

    vampiresilence

    Kostenloser Webspace von vampiresilence

    vampiresilence hat kostenlosen Webspace.

    Ah, natürlich ! "." matcht ya auch "<" und ">", somit kann der greedy-match garnicht zustande kommen, wenn "<" und ">" als Pattern ausgeschlossen werden ! Dankeschön !!

    Liebe Grüße
    - VampireSilence
  7. 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!