Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

Wie Muster optimal in Musterguppen zerlegen?

  Alt 16. Feb 2010, 10:45
Tachchen,

ich versuch es nochmal besser zu erklären.

Es geht im Prinzip um ein Set of WideChar
(genauer geht es um einige DynCharSets, aber dieses ist eigentlich belanglos)

Ich hab praktisch ein Set und möchte dieses möglichst effizient in eines von ein paar vordefinierten "Sets" und den Rest zerlegen.

Es handelt sich dabei um mehrere zusammengesetzte CharSets aus einem RegEx-Ausdruck.

Einfaches Beipsiel: [a-zABC0-9] und dieses soll zu [[:lower:]] + [[:digi:]] + [ABC] ( [ABC[:lower:][:digi:]] ) werden.
(hab für das Beispiel jetzt mal nur die entsprechenden ASCII-Zeichen und nicht alle des ganzen Unicodebereichs verwendet)

Nur blöd, daß es sich hierbei um eine Gruppe von 65-tausend Zeichen und über 30 "Standard"-Sets handelt,
welche auch noch "negiert" enthalten sein können.

[\0-\\:-\x{FFFF}] sollte z.B. [^[:digit:]], bzw. \D ergeben.


Alle Kombinationen durchzuprobieren ist auch nicht so optimal, immerhin kann es mehrere solcher Sets in einem Ausdruck geben und selbst nur ein Durchgang würde ewig dauern.

Bei nur 30 Standardklassen (Sets) würden es schon 60 Klassen ergeben, da jede auch invers enhalten sein kann und dann kann alles zusammen auch nochmal invertiert sein ... macht also hier schonmal 2^120 Kombinationen.

OK, Einiges könnte man ignorieren, da einige Klassen aus anderen zusammengesetzt sind.
z.B. wenn [:alpha:] enthalten ist, dann sind [:lower:] und [:upper:] irrelevant, da sie dort schon drin vorkommen sind, aber dennoch bleiben Unmassen an Möglichkeiten übrig, um alles bruteforcemaßig durchzuprobieren.

Wie könnte ich so also möglichst "einfach"/schnell einen geparsten RegEx-Ausdruck, welcher nur noch die zusammengerechneten und optimierten Werte enthält, wieder zurück in einen String überführen?


Grund:
Eigentlich hatte ich nicht vor das Originalsuchmuster zu speichern und falls nötig Eines aus den zerlegten Daten wieder zusammenzusetzen.
$2B or not $2B
  Mit Zitat antworten Zitat