Решение будет зависеть от формата многострочных комментариев и используемого языка. Для многострочных комментариев на C языке этот может работать с флагами gmx
:
^ # Start of the line followed by
(?: # any number of the following groups:
[^'"\/\n] # - a normal character, i.e.
# not an apostrophe, a quote, a slash or a new line
| #
'\/' # - a slash in apostrophes
| #
'"' # - a quote in apostrophes
| #
" # - a quoted string, consisting of the following:
(?: #
[^"\\\/] # - not a quote, slash or backslash
| #
\\. # - an escape sequence: a backslash and any character
| #
\/ # - a slash
)*+ # end of quoted string
" #
)*+ # end of pre-comment part of the line
#
\/\*.*+\n # Start of a multi-line comment
( # Sequence of lines consisting of
(?: #
(?: #
. # any character
(?!\*\/) # not followed by the end of the comment
)*+ # repeated any number of times
\n # and a new line,
)+? #
) #
.*\*\/ # followed by a line containing an end of comment
или в сжатой форме :
^(?:[^'"\/\n]|'\/'|'"'|"(?:[^"\\\/]|\\.|\/)*+")*+\/\*.*+\n((?:(?:.(?!\*\/))*+\n)+?).*\*\/
Мы используем здесь притяжательные модификаторы, чтобы избежать ненужного обратного отслеживания, которое может значительно снизить производительность.
Следует отметить, однако, что регулярные выражения не должны использоваться для синтаксического анализа языков программирования, таких как C, и некоторые языки программирования (например, Perl) вообще не могут быть статически проанализированы каким-либо методом, не только регулярными выражениями.