Ich würde gerne für einen einfachen Code-Converter mit preg_replace() diese Umwandlung machen: z.B. sollte
Zitatpublic void main() {
printf("Test");
}
zu
Zitatprintf("Test");
umgewandelt werden.
Ich möchte nur das "public void main() {" und das "}" am Ende löschen. Der Rest soll eh gleich bleiben.
Es würde eh gut funktionieren, allerdings erkennt das preg_replace() nach meinem Suchmuster keine Newlines, sodass keine Ersetzung durchgeführt wird, wenn die Main-Funktion nicht auf einer einzigen Zeile steht.
Momentan habe ich diesen php-Code:
<?PHP
if ( isset($_GET['iframe']) )
{
$Programm=$_POST['mein_html'];
//*************** "public void main(***) {....}" --> "...." ****************
$suchmuster = "/public\s*void\s*main\s*\(.*\)\s*\{(.*)}/i";
$ersetzung = "\${1}";
$Programm = preg_replace($suchmuster, $ersetzung, $Programm);
//*************** "private void main(***) {....}" --> "...." ****************
$suchmuster = "/private\s*void\s*main\s*\(.*\)\s*\{(.*)}/i";
$ersetzung = "\${1}";
$Programm = preg_replace($suchmuster, $ersetzung, $Programm);
//*************** "void main(***) {....}" --> "...." ****************
$suchmuster = "/void\s*main\s*\(.*\)\s*\{(.*)}/i";
$ersetzung = "\${1}";
$Programm = preg_replace($suchmuster, $ersetzung, $Programm);
$Programm = preg_replace("=<br */?>=i", "<Zeilenvorschub>", $Programm);
$Programm = nl2br($Programm);
$Programm = preg_replace("=<br */?>=i", "", $Programm); // löscht die Zeilenumbrüche zwischen den Programmzeilen
$Programm = ereg_replace("<Zeilenvorschub>","
",$Programm);
$Programm = stripslashes($Programm);
Alles anzeigen
Die Daten (das Programm), das umgewandelt werden soll, werden aus diesem Formular gesendet:
<form name="form1" method="post" action="<?PHP echo $_SERVER[PHP_SELF]; ?>?iframe=yes" target="myframe">
Dein C-Programm:
<textarea name="mein_html" id="xyz" cols="60" rows="15" wrap="soft"></textarea>
</p>
<input type="submit" name="Submit" value="Programm ausführen">
</form>
Alles anzeigen
Ich habe auch schon versucht, den Code, der die Newlines in Breaks umwandelt und danach die Breaks löscht, vor dem preg_replace() zu setzen, aber da funktioniert die Umwandlung leider auch nicht, obwohl die Breaks eigentlich gelöscht sein sollten.
Ich habe auch probiert, statt .* ein \n zu verwenden, um zunächst einmal das Suchmuster zu erkennen, wo sich zwischen "{" und "}" nur Zeilenumbrüche befinden, aber das funktioniert leider auch nicht.
Wie kann ich das Suchmuster am besten angeben, damit die Umwandlung auch dann funktioniert, wenn sich die main-Funktion auf mehreren Zeilen erstreckt? Ist es mit preg_replace() eh möglich, ein Suchmuster zu erkennen, das sich über mehrere Zeilen erstreckt?
Im Voraus vielen Dank für Eure Hilfe!
Viele Grüsse,
Robert