PHP und HTML voneinander trennen

arto

Grünschnabel
Hi

Ich versuche ein Eclipse Plugin zu erstellen, mit dem ich dann den Inhalt eines PHP Files manipuliere (natürlich im Workspace). Um die gewünschten manipulationen anfertigen zu können, möchte ich die HTML und PHP teile des Files voneinander trennen und nach der Manipulation wieder zusammenführen. (Dies weil ich HTML ausserhalb der PHP tags anders behandeln muss als PHP code oder HTML das mittels echo oder print ausgegeben wird).
Ich habe daran gedacht, die einzelnen Teilstrings dann in zwei verschiedenen HashMaps zu speichern und die Reihenfolge in einer ArrayList festzuhalten.

Also es soll zum Beispiel aus
Code:
<html>
<head>
<title>Ein Beispiel</title>
</head>
<body>
<?
echo "foo";
echo "<p>Hier kann auch HTML stehen</p>";
?>
</body>
</html>

etwas in der Art resultieren:

Code:
HashMap html:
"1" => "<html>
<head>
<title>Ein Beispiel</title>
</head>
<body>",
"3" => "</body>
</html>"

HashMap php:
"2" => "<?
echo \"foo\";
echo \"<p>Hier kann auch HTML stehen</p>\";
?>"

ArrayList reihenfolge:
0 => "html_1",
1 => "php_2",
2 => "html_3"

Die Frage ist nun, wie teile ich das File auf? Geht das am besten mit Regex? Oder eher Zeichen für Zeichen?


Zu beachten gilt auch, dass ein solches PHP file auch mit PHP code beginnen kann, ohne dies mit <? einzuläuten, da es sich teilweise um Files handelt, die später zusammengesetzt werden.

Ich danke schon im Voraus für alfällige Lösungsansätze

Gruss arto
 
Also ich würde an Deiner Stelle sicher versuchen mit RegEx zu arbeiten und nicht selbst alles zu Fuß parsen.
Irgendwie verstehe ich Deine ArrayList noch nicht so richtig. Ich vermute mal, dass in der ArrayList die Keys der HashMaps stehen sollen, korrekt?

Vielleicht wäre für Dich eine LinkedHashMap von Vorteil, um die Reihnfolge zu behalten.

Anderseits, wenn ich Dich richtig verstehe, wird die Value in den HashMaps immer bis zum nächsten "Sprachwechsel" und nicht nur pro Zeile bei Dir vorgenommen. Das hat IMHO zur Folge, dass die Keys im Array sich immer und grundsäzlich von der "Sprache" her abwechseln, stimmts?
Wenn dem tatsächlich so sei und Du die Manipulation der Stringwerte sequenziell vornehmen würdest, kannst Du Dir vermutlich die HashMap oder auch eine LinkedHashmap sparen und nur mit einer ArrayList<String> arbeiten, denn der Zugriff ist dann auch recht flink (z.B. alle geraden Indices sind PHP und alle ungeraden HTML) jedoch müstest Du das, ob die geraden PHP oder HTML sind, natürlich dynamisch ermitteln und z.B. in einem boolean speichern.

mfg

Takidoso
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück