C# Regex Ungreedy
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
aussehen
bezug
code
ergebnis
frage
glauben
helfen
laufen
match
nichtmal
option
parameter
posten
probieren
problem
tabelle
text
trennen
vorstellen
zeile
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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#.
-
Das Regex wäre:
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>
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.**</td><td>**</td></tr><tr><td>**</td><td>**</td><td>**
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 -
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]; }
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage