Hallo,
es sind ein paar Monate rum und endlich kann ich mich an die Übersetzungstabellen machen. *Uff*
Ich hatte zuerst den Tokenizer ausprobiert und bin nach einigen Experimenten wieder davon abgekommen. Der Tokenizer parst den String nicht, sondern zerlegt ihn nur in kleinste Teile. Aber er gibt nicht an, wo ein Befehl anfängt und aufhört. Das Filtern nach dem define Befehl war nicht schwer. Aber wo hört er dann auf? Erst vor dem nächsten define Befehl? Dann werden auch andere Codeteile in den define Value eingelesen. Nur Kommentare weglassen ist auch kontraproduktiv, die sollten ja gerade erhalten bleiben um den define Bereich nicht völlig nackt zu lassen. Ein paar Hinweise was, wer, wo und warum geändert hat sollten schon bleiben.
Sei's drum. Ich habe mich also entschlossen mit den RegExp weiter zu machen. Der Ausdruck von Apo und die Erweiterung von Fireweasel haben schon viel geholfen. Vielen Dank nochmal dafür.
Mein aktueller Ausdruck sieht so aus:
PHP-Code:
^s*define[^(]*(*["]([^\'\"]+)[\'\"][^,]*,\s*[\'\"]*(.*)(?=[\'\"]*\s*\)\s*;)\s*(?=[\'\"]*\s*\)\s*;[^\n]*)
und besteht aus 3 Haupt-Blöcken (grün eingefärbt):
^\s*define[^\
(]*\(*[\'\"]([^\'\"]+)[\'\"][^,]*,\s*[\'\"]*
(.*)(?=[\'\"]*\s*\)\s*

\s*
(?=[\'\"]*\s*\)\s*;[^\n]*)
Der define Name, der Inhalt mit allem was bis zum '); kommt und alles was noch danach stehen sollte. (Kommentare, ...) Geholfen hat mir eine Seite über RegExp Assertions (Behauptungen ->
Der RegExp-Evaluator - RegExp-Tutorial - Assertions ) mit denen ich auf ein PHP Zeilenende hin filtern konnte.
Mein aktuelles Problem: Ich setze die Parameter /imx ein. Sobald ich auch /s setze wird die ganze Datei bis zum Ende des letzten define Befehl als ein einziger Treffer zurück gegeben. Leider kann ich damit keine Multi-Line Befehle erkennen. Zahlen und Texte mit PHP Funktionen & GLOBALS sind kein Problem. Kann mir da jemand weiter helfen? Ich müsste dem Ausdruck sagen, das er nicht! nach
['"]*\s*\)\s*; suchen darf. Das Ausschließen bekommen ich aber nur mit einzelnen Zeichen hin. [^ ]
Könnt Ihr mir bitte weiter helfen? Hier kann man sich das Ergebnis live anschauen:
http://regexp-evaluator.de/evaluator...12a1/#ergebnis
Beispieltext:
PHP-Code:
define('HEADER_M',
'<br />BIC/SWIFT: ' . MODULE_PAYMENT .
// '<br />Sort Code: ' . MODULE_PAYMENT_EUTRANSFER_SORTCODE .
'<br /><br />Die Ware wird ausgeliefert, wenn der Betrag eingegangen ist.<br />');
define('HEADER_OUT_OF_STOCK_', 'Die ' . STOCK_OUT_OF_STOCK . ' Artikel sind nicht auf Lager.<br />');
define('HEADER_TOTAL',"Summe");
define('HEADER_NEWLINE',
'Summe');
define('HEADER_FLOAT', 17.5);
define('HEADER_INT', 895);
Davon wird schon alles erkannt, bis auf die erste Multiline Zeile.