Die regulären Ausdrücke in diesem Beispiel sind
nicht auf meinem Mist gewachsen sondern stammen aus dem hervorragenden
Buch "Mastering Regular Expressions" von Jeffrey E. F. Friedl.
Immerhin den Ausdruck zum matchen von heredoc-Abschnitten habe ich selbst hinzugefügt.
Wer das hier verstehen möchte möge sich also das Buch besorgen.
(
Hinweis Es ist nicht für Einsteiger geeignet, wirklich nicht.)
Eine besonders elegante Möglichkeit Kommentare zu entfernen ist es einfach
den PHP-Tokenizer zu benutzen.
<?php
$text = <<< EOT
/*
Dieser Kommentar soll entfernt werden
<a href="http://www.test.com">test</a>
*/
\$a = 12;
// Dieser hier auch ...
\$b = 10; /* ... und der hier */
\$s = 'Innerhalb eines Strings /* */ natuerlich nicht'; /* aber der hier schon, gelle */
\$test = "HUHUH /* geht doch oder?*/";
\$a = 42 // Die Antwort
\$tmp = <<< eot
Dieser Kommentar sollte erhalten bleiben, denn
/* bal */
er steht innerhalb eines here doc Abschnitts.
eot;
EOT;
function strip_comments($s)
{
$comment1 = '/\*[^*]*\*+(?:[^/*][^*]*\*+)*/';
$comment2 = '//[^\n]*';
$comment3 = '\#[^\n]*';
$single = "'[^'\\\]*(?:\\.[^'\\\]*)*'";
$double = '"[^"\\\]*(?:\\.[^"\\\]*)*"';
$other = '[^"\'/\#<]';
$eot = '<<<\s?(\S+)\b.*^\\2';
$r = preg_replace ("#($other+ |
$single$other* |
$double$other* |
$eot$other*)|
$comment1|
$comment2|
$comment3
#msx" ,'\1', $s);
return $r;
}
echo '<h2>Original</h2><pre>'.htmlentities($text).'</pre>';
$new = strip_comments($text);
echo '<h2>Ohne Kommentare</h2><pre>'.htmlentities($new).'</pre>';
?>