Лучшее многострочное выражение regex комментариев - это развернутая версия (?s)/\*.*?\*/
, которая выглядит как
String pat = "/\\*+[^*]*\\*+(?:[^/*][^*]*\\*+)*/";
См. пояснение в regex101.com .
Короче говоря,
/\*+
- сопоставить начало комментария, /*
и любые звездочки 0+ после него [^*]*\*+
- сопоставить 0+ символов, кроме *
, за которыми следуют 1+ литеральные *
(?:[^/*][^*]*\*+)*
- 0+ последовательности из: [^/*][^*]*\*+
- не /
или *
(совпадающие с [^/*]
), за которым следуют символы 0 + не звездочки ([^*]*
), за которыми следуют звездочки 1+ (\*+
) /
- закрытие /
regex Дэвида требует 26 шагов , чтобы найти совпадение в моей строке примера, а моему регулярному выражению требуется только 12 шагов . С огромными входами, регулярное выражение Дэвида, скорее всего, потерпит неудачу с проблемой переполнения стека или что-то подобное, потому что совпадение .*?
ленивых точек неэффективно из-за ленивого расширения шаблона в каждом месте, которое выполняет механизм регулярных выражений, в то время как мой шаблон соответствует линейным фрагментам текста в один раз.