\/\*([^*]|\n|\*+[^*/])*\*+\/
Что происходит, так это то, что * жадный - он будет соответствовать как можно большей длине строки. Предыдущее выражение обрабатывает символ * отдельно, гарантируя, что регулярное выражение может продолжаться только до тех пор, пока за ним не следует символ /. Это достигается за счет того, что внутренние единицы регулярного выражения являются одним из
- персонаж, который не *
- перевод строки
- строка * s, за которой следует символ, который не является /
В конце есть строка * s, за которой следует /. (Примечание: в предыдущей версии этот случай не обрабатывался правильно. Мне бы очень хотелось, чтобы в flex был оператор *?).