(?ms)^\s*([^\-/\s][^;]+;)((?:(?:\s+/\*(?:.(?!\*/))+.\*/)|(?:\s+\-\-[^\r\n]+))*)
должен делать это красиво.
(Примечание: (?ms)
- это способ в Java указать режим «многострочный» «точка-все», но у меня проверено на RETester , и он работает)
Может обнаруживать 0 или более комментариев после select
.
Многострочные комментарии принимаются между /*
и */
из-за использования положительного прогноза (?:.(?!\*/))+
в группе без захвата
Обновление: изменено, чтобы обнаруживать любую строку без комментариев перед 0 или многими комментариями.
Чтобы обнаружить комментарий1, затем утверждение, затем комментарии:
(?ms)((?:(?:\s+/\*(?:.(?!\*/))+.\*/)|(?:\s+\-\-[^\r\n]+))*)\s*^\s*([^\-/\s][^;]+;)((?:(?:\s+/\*(?:.(?!\*/))+.\*/)|(?:\s+\-\-[^\r\n]+))*)
Примечание: у меня есть обновление в обоих регулярных выражениях (в начале и в этом) части обнаружения операторов:
\s*([^\-/][^;]+;)
до
\s*([^\-/\s][^;]+;)
Примечание bis: будет обнаружен только первый "comments - statement - comments
".
Следующие блоки также будут обнаружены, но только как: "statement - comments
", затем "statement - comments
" и так далее. (комментарии над утверждением являются частью комментариев ниже предыдущего заявления)