Entwickler-Ecke

Basistechnologien - Regex-Performance-Frage???


bergrath - Mi 09.01.08 12:33
Titel: Regex-Performance-Frage???
Hi.

Ich habe verschiedene Regexes, die sich sehr stark unterscheiden in ihrer Geschwindigkeit. Da sie eigentlich ziemllich ähnlich sind im Aufbau und in ihrer Länge ist es mir ein Rätsel wieso fast alle ein Ergebnis innerhalb von Sekunden ausspucken und eine andere Regex fast 20 Minuten braucht um ein Ergebnis zurück zu geben. Ich poste hier mal die verschiedenen Regexes. Die letzte Regex ist die, die 20 Minuten braucht.

Vielleicht kann mir ja jemand von euch sagen woran dieser gravierende Performance-Unterschied liegt. Vielen Dank im Voraus.

Regexes:
("([2-8][0-9]|[-]*[S][A-Z0-9]{3})([ ]*|[A-Z0-9]*)([*][2-8A-Z][0-9A-Z]{3})*[*+-]*([2-8][A-Z0-9]{3})*([+-]*[S][W][A-Z0-9]{2})*[*]*([S][A-Z0-9]{3}[*]*([2-8][0-9][A-Z0-9]))*[=][S][A-Z0-9]{3}([$]?)")

("[-]*[(]([2-8][0-9]|([2-8][0-9A-Z]{3}))[,][0-9A-Z ]*([*][0-9A-Z ]*)*[)][=][S][A-Z0-9]{3}")

("([2-8][0-9][0-9A-Z ]|[-]*[S][A-Z0-9 ]{3})([*][2-8][0-9][0-9A-Z ]|([S][A-Z0-9]){3})*[=][S][A-Z]{3}")

("[2-8][0-9][0-9A-Z]*[*+-]*([2-8][0-9][0-9A-Z][*+-])*([(][2-8][0-9]([0-9][0-9])*[,]([0-9A-Z ]*[*]*)+[)])[=][S][A-Z]{3}")

("[+-]*([S][A-Z][A-Z0-9][A-Z0-9]|[2-8][0-9][0-9A-Z])([*+-][S][A-Z][A-Z0-9][A-Z0-9]|[2-8][0-9A-Z ]{3})*[=][S][A-Z][A-Z0-0][A-Z0-9]")

("([(]([2-8][0-9][0-9][0-9]|[2-8][0-9])[,]([0-9A-Z]*[*]*)+[)])([*+]*([(]([2-8][0-9][0-9][0-9]|[2-8][0-9])[,]([0-9A-Z]*[*]*)+[)]))*[=][S][A-Z]{3}")


Wie gesagt: Die letzte Regex ist die, die 15-20 Minuten braucht. Die anderen nur Sekunden. Woran könnte das liegen???

MfG


Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Mi 09.01.2008 um 13:53


Kha - Mi 09.01.08 17:15

Du scheinst beim Thema Cross-Posten ja äußert penetrant zu sein :autsch: .
http://www.mycsharp.de/wbb2/thread.php?threadid=48290


JüTho - Mi 09.01.08 17:21

Aber ein erneuter Versuch unter myCSharp um 13:43 Uhr [http://www.mycsharp.de/wbb2/index.php] wurde schnell gelöscht. :mrgreen: Jürgen


Kha - Mi 09.01.08 17:25

Uhm... wenn ich das richtig verstehe, wurde ja um 10 Uhr [http://www.mycsharp.de/wbb2/thread.php?postid=265230#post265230] auch noch ein Doppelposting zusammengefügt, dann wären wir summa summarum bei 4 Threads für ein Thema... Wow... :gruebel: .


Christian S. - Mi 09.01.08 17:27

Leute, ist gut jetzt :roll:
Ihr tut ja so, als hätte bergrath gerade einen Mord begangen ...


bergrath - Fr 11.01.08 08:28

Hi Leute.

Ja so kommt es mir auch vor, als hätte ich etwas kriminelles getan. Dabei habe ich nur versucht so schnell wie möglich zu einer Antwort zu kommen.

Ich wollte niemandem den Tag versauen durch meine Doppelpostings. Ich konnte ja nicht ahnen, dass nach meinen Postings in verschiedenen Foren gesucht wird, um mir diese zu schließen.

Leider bin ich durch diese ganzen geschlossenen Threads noch nicht zu einer Beantwortung meiner Frage bzw. meiner Fragen geführt. Die Postings bezogen sich auch nicht immer auf das gleiche Thema, sondern hatten verschiedene Fragen.

Also bleibe ich jetzt bei meinen Threads und eröffne keine neuen mehr.

MfG
Bergrath der böse Doppelposter


bergrath - Fr 11.01.08 11:18

Hi.

Kommen wir nochmal zurück auf die ursprüngliche Frage am Anfang des Threads.

Kann mir dazu jemand was sagen??????? (oder wird hier mehr auf die kritischen Bemerkungen geachtet und die ursprüngliche Frage übersehen ????)

MfG


bakachan - Fr 11.01.08 11:26

Ich bin der gleichen Meinung wie svenson(der dir gestern mittag darauf schon im myCSHARP-Forum geantwortet hat --> ja du solltest dir auch mal die antworten auf deine posts genau durchlesen wenn du sie schon in etlichen foren mehrmals postest)
das Problem sind wahrscheinlich die "*[*]*" konstruktionen da diese dem Regex sehr viel Spielraum und somit rechenaufwand geben. Du solltest versuchen präzisere vorgaben im regex zu verwenden.


bergrath - Fr 11.01.08 11:45

hi.

ich lese mir die antworten schon durch, die ich bekomme. Aber ich war der Meinung, daß es an etwas anderem liegen könnte.

Ich habe andere Regexes, die sehr viel schneller sind und ähnlich formuliert sind.

Aber ich werde mal versuchen die regex umzuformulieren.

Danke.

MfG