Ich würde gerne für einen einfachen Code-Converter mit preg_replace() diese Umwandlung machen: z.B. sollte

public void main() {
printf("Test");
}
zu

printf("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:

Code:
<?PHP 
if &#40; isset&#40;$_GET&#91;'iframe'&#93;&#41; &#41; 
&#123; 
   $Programm=$_POST&#91;'mein_html'&#93;;


//*************** "public void main&#40;***&#41; &#123;....&#125;" --> "...." ****************
 
  $suchmuster = "/public\s*void\s*main\s*\&#40;.*\&#41;\s*\&#123;&#40;.*&#41;&#125;/i";
  $ersetzung = "\$&#123;1&#125;";
  $Programm = preg_replace&#40;$suchmuster, $ersetzung, $Programm&#41;;


 //*************** "private void main&#40;***&#41; &#123;....&#125;" --> "...." ****************
 
  $suchmuster = "/private\s*void\s*main\s*\&#40;.*\&#41;\s*\&#123;&#40;.*&#41;&#125;/i";
  $ersetzung = "\$&#123;1&#125;";
  $Programm = preg_replace&#40;$suchmuster, $ersetzung, $Programm&#41;;


 //*************** "void main&#40;***&#41; &#123;....&#125;" --> "...." ****************
 
  $suchmuster = "/void\s*main\s*\&#40;.*\&#41;\s*\&#123;&#40;.*&#41;&#125;/i";
  $ersetzung = "\$&#123;1&#125;";
  $Programm = preg_replace&#40;$suchmuster, $ersetzung, $Programm&#41;;


  $Programm = preg_replace&#40;"=<br */?>=i", "<Zeilenvorschub>", $Programm&#41;;

  $Programm = nl2br&#40;$Programm&#41;;


  $Programm = preg_replace&#40;"=<br */?>=i", "", $Programm&#41;;  // löscht die Zeilenumbrüche zwischen den Programmzeilen

  $Programm = ereg_replace&#40;"<Zeilenvorschub>","
",$Programm&#41;;    

  $Programm = stripslashes&#40;$Programm&#41;;

Die Daten (das Programm), das umgewandelt werden soll, werden aus diesem Formular gesendet:

Code:
<form name="form1" method="post" action="<?PHP echo $_SERVER&#91;PHP_SELF&#93;; ?>?iframe=yes" target="myframe"> 
    

Dein C-Programm&#58;

    <textarea name="mein_html" id="xyz" cols="60" rows="15" wrap="soft"></textarea> 
    </p> 
    <input type="submit" name="Submit" value="Programm ausführen"> 
</form>

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
Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!