регулярные выражения. корректное выделение блочного (потокового) комментария.

Shredder2003
Дата: 23.09.2015 11:20:23
Приветствую, друзья.
Не могу придумать, как с помощью регулярки корректно вычленять блоковый комментарий из текста.
Если добавить квантификатор ленивости, как в примере ниже, то получится выделять просто блоковые комментарии.
А если я хочу выделить блоковый комментарий, который относится именно к процедуре, тут тупик.

Тут :
with t as (
select '
package body test_comments is
/*first block comment*/

/*second block comment*/
procedure testik_pestik is
begin
' text
,'/\*(.*?)\*/\s+procedure\s+([^[:space:](]+)' pattern
from dual
)
select regexp_substr(text,pattern,1,1,'inm')
from t


результат такой:
оракл
/*first block comment*/

/*second block comment*/
procedure testik_pestik


а надо бы, как вы прекрасно понимаете,
оракл
/*second block comment*/
procedure testik_pestik


Возможно ли это с помощью регулярок в 11-12 версиях СУБД?
Elic
Дата: 23.09.2015 11:36:36
'/\*([*][^/]|[^*])*\*/\s+procedure\s+([^[:space:](]+)'
Скворцов Иван
Дата: 23.09.2015 11:40:03
regexp_substr(text,'/\*([^.(\*/)]*?)\*/\s+procedure\s+([^[:space:](]+)',1,1,'inm')
Скворцов Иван
Дата: 23.09.2015 11:44:19
Или даже лучше без точки:
regexp_substr(text,'/\*([^(\*/)]*?)\*/\s+procedure\s+([^[:space:](]+)',1,1,'inm')
Shredder2003
Дата: 23.09.2015 12:23:41
Элик - супер, всегда правильное решение.
Иван - решение очевидное и неправильное.
В реальной жизни не сработает на таком:
недра сорцов
package body test_comments is
/*first block comment*/

/*second block comment written by major Pronin 19/09/2024 ***-*** */
procedure testik_pestik is
begin
Elic
Дата: 23.09.2015 12:42:18
Shredder2003
В реальной жизни
всё гораздо хуже:
автор
package body test_comments is
-- /*first block comment
procedure zapadlo;
/*second block comment written by major Pronin 19/09/2024 ***-*** */
procedure testik_pestik is
begin
Shredder2003
Дата: 23.09.2015 12:57:51
Elic,

это уже "кривой" коммент, такой коммент надо исправлять.
Скворцов Иван
Дата: 23.09.2015 15:49:54
Коллеги, а объясните тогда значение выражения ([*][^/]|[^*])* уже все мозги сломал)
SY
Дата: 23.09.2015 16:19:45
Скворцов Иван,

Побереги мозг, покури базовую доку регулярных выражений. А выражения твой мозг пытается осилить описаны даже в ораклячей доке - POSIX Metacharacters in Oracle Database Regular Expressions.

SY.