Requläre Ausdrücke mal anders herum

Enumerator

Mitglied Kamel
Abend!

Ich suche eine Möglichkeit, schnell und einfach ein beliebiges Zeichen zu ermitteln, das in einem String NICHT vorkommt. Klar könnte ich einfach eine Funktion schreiben, die das für mich macht - aber das muss doch auch mit regulären Ausdrücken gehen... Ideen?

Gruß
Enum
 

Gumbo

Erfahrenes Mitglied
Von welcher Zeichenmenge gehst du dabei aus? Oder reicht bei der gegebenen Zeichenkette „abc“ einfach die Aussage „jedes beliebige Zeichen außer a, b oder c“?
 

Enumerator

Mitglied Kamel
Abend!

Die Zeichenmenge entspricht dem kompetten Zeichensatz - außer Steuerzeichen. Eigentlich ist es ganz einfach - ich möchte ein Array aus Skalaren/Strings 'joinen', aber auch wieder 'splitten' können - nur weiss ich vorher nicht, welches Zeichen sich als Trennsymbol eignet...

Thx
Enum
 

Enumerator

Mitglied Kamel
Tja...
Wenn's so einfach wäre. Danke, aber das wird mit CSV zu problematisch. Das Ziel ist eine Datei wie diese:config.cfg
Code:
s  APPNAME	Weblication
s  DOCNAME	Testdoc
b  ISXHTML	true
s  ENCTYPE	iso-8859-1
s  DOCTYPE	strict
s  DEFLANG	en
l, ALTLANG	de, tr
b  CACHING	f
s  EXPIRES	0
b  USESCSS	true
s  PRAGSET	no-cache
h; IMPORTS	imports.cfg; nochwat.cfg
a  VALLIST	vallist.cfg
... quasi eine *configformat*fuer*freaks*, aber ganz praktisch. der character in der ersten spalte steht für den datentyp...
Code:
s  = skalar/string/int/wasweisich
b  = boolescher wert (anzugeben durch 'true', 'false', 0, 1 weglassen - egal)
lx = liste, durch -x- getrennt <------ DARUM GEHTS
hx = hashes, sind zu importieren und haben das selbe format
ax = array-liste, kann auch aus mehreren files gebastelt werden
Zu gut Deutsch: ich habe mir ein Format gebastelt, das es ermöglicht, mit einem simplen Editor die Struktur eines Hashes(Perl) bzw. eines assoziativen Arrays(PHP) etc. vorzubereiten.
Die (statische) Klasse, die das ganze dann übersetzt, würde in Perl z.B. das Konstrukt anschließend mit (n)store Speichern und/oder Manipulieren und/oder wieder in eine Textdatei speichern undundund/oderoderoder... ;-)

Das t auch alles ganz prima, nur ist die Performance beim Speichern in eine lesbare Datei miserabel - weil ich halt bei jeder Liste/ jedem Array, das als -lx- Wert gespeichert wird, extra eine Funktion aufrufe, die den halben ASCII-Code durcharbeitet - und pro Zeichen das gesamte Array usw. Da sowohl -ax- als auch -hx- werte wiederum referenzen enthalten/dateien importieren können, schleift das minunter gewaltig.

Hast Du vielleicht noch eine Idee?

Gruß
Enum
 
Zuletzt bearbeitet:

Gumbo

Erfahrenes Mitglied
Es gibt auch Formate mit umfangreicheren Datentypen. So etwa YAML oder JSON, für die es bereits fertige Implementierungen gibt.
 

Enumerator

Mitglied Kamel
Hast ja recht, nur leider vermisse ich immer die Funktion, Teilstrukturen in andere Files auszulagern. Allerdings muss ich einsehen, dass es bestimmt bereits ein Format+Implementierung gibt, das diese Funktion mit abdeckt.

Nur habe ich folgendes Problem: das o.e. Format nutze ich seit Jahren, nahezu jede PHP-basierte Webapplikation an der ich mitgewerkelt habe, verwendet dieses Format.
Bisher habe ich in Perl nie etwas derartiges gebraucht, sonst hätte ich bestimmt schon vor Jahren eine Implementierung für Perl geschrieben. Nun habe ich einen Kunden, dessen Besucherzahlen stetig wachsen, und den Auftrag, die Seite nach modperl2 zu übersetzen.

Ob das Sinnvoll ist, sei mal dahingestellt - Auftrag ist Auftrag. Nur würde es erheblich schneller gehen, wenn ich die alten *.cfgs nutze. Das werde ich auch, nur hätte es mir gefallen, ebendiese Bremse mit dem Listen-Trennzeichen ein für alle mal aus dem Weg zu schaffen. (Für den Fall, das so ein Auftrag noch einmal 'reinschneit ;-) ...)

Gruß
Enum

PS: Ich werde mal sehen, ob ich in Zukunft nicht mal ein bestehendes Format testen werde... :)
 

Gumbo

Erfahrenes Mitglied
Ich würde ein festes Trennzeichen verwenden und Wörter, die diese Zeichen enthalten, in Anführungszeichen setzen. Damit hast du ein festes Format, hast aber keinerlei Einschränkung bei den zu verwendenden Zeichen.
 

Enumerator

Mitglied Kamel
Du hast recht, mir wird wohl nichts anderes übrig bleiben, wenn ich die Performance steigern möchte. Aber dann verliere ich ein wenig Flexibilität... Allerdings sind diese Dateien ja nur zum erstmaligen Aufbau der Strukturen, bzw. zu Rekonfiguration, und werden sowieso in Bytecode übersetzt.
'Never touch a running system' - sprach's, und hat die Skipte auf einem arbeitslosen Server geparkt. Bis morgen dürfte der wohl fertig werden...
Dennoch vielen Dank für Deine Hilfe - vor allem JSON werde ich wohl in Zukunft öfter nutzen.
Aber, falls Du jemals auf eine 'beliebiges-nicht-existentes-zeichen'-Funktion von Regs oder einen genialen Algorithmus stößt... ;-)

Gruß
Enum
 
Zuletzt bearbeitet:

Gumbo

Erfahrenes Mitglied
Das Problem dabei ist: das Trennzeichen muss vorher bekannt sein. Denn sonst würde die Eingabe ja nicht als Liste von Wörtern sondern als einziges Wort erkannt werden. Denn gerade das Trennzeichen trennt ja die einzelnen Wörter.