Die frei fließlende Regex

Wir haben gerade eine Regex aufgebaut, die zwar C-Kommentare erkennt, die aber versagt, wenn innerhalb von Strings in Anführungszeichen Kommentar-Begrenzer auftauchen, die gar keine sind. Ein Perl-Programmstück wie das folgende, das Kommentare aus C-Programmen entfernt, tut unter Umständen zu viel des Guten:

$prog =~ s{/\*[^*]*\*+(?:[^/*][^*]*\*+)*/}{}g; # Entfernt C-Kommentare (und anderes!)

Damit wird der Teil, auf den unsere Regex passt, aus dem Text in $prog entfernt (d.h. durch nichts ersetzt). Es gibt aber nichts, das unsere Regex daran hindert, ein Kommentarzeichen zu erkennen, das in einem String auftritt:

char *CommentStart = "
char *CommentEnd   = "*/";  

Hier sind die Kommentare, die wir finden wollten, halbfett dargestellt, ...

Get Reguläre Ausdrücke, 3rd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.