C#Regex从pl / sql代码中获取注释块

我想从字符串中提取注释作为块。

例如,我有一个PL / SQL代码:

--comment1 select * from t_table; --i want comment 2; /*i want comment 3 */ --i want comment 4 OPEN data_cur; 

在这里,我想要在OPEN data_cur之前的所有单行和多行注释; 但是从t_table中选择*后;

即我想要两个PL / SQL语句之间的完整注释块。

我希望正则表达式匹配字符串并形成组:

  1. SQL语句
  2. 整个评论块

可以使用任何正则表达式完成吗?

 (?ms)^\s*([^\-/\s][^;]+;)((?:(?:\s+/\*(?:.(?!\*/))+.\*/)|(?:\s+\-\-[^\r\n]+))*) 

应该做得很好。
(注意:( (?ms)是Java中指定“多行”“全点”模式的方式,但我已经在RETester上进行了测试并且它有效)

它可以在select后检测0或更多注释。
/**/之间接受多行注释,因为在非捕获组中使用了正向前瞻 (?:.(?!\*/))+

更新:修改它以检测0或许多注释之前的任何“非注释”行。


要检测comment1,然后声明,然后注释:

 (?ms)((?:(?:\s+/\*(?:.(?!\*/))+.\*/)|(?:\s+\-\-[^\r\n]+))*)\s*^\s*([^\-/\s][^;]+;)((?:(?:\s+/\*(?:.(?!\*/))+.\*/)|(?:\s+\-\-[^\r\n]+))*) 

注意:我在两个正则表达式(开头的那个和这个)中更新了语句检测部分:

 \s*([^\-/][^;]+;) 

 \s*([^\-/\s][^;]+;) 

注意:只会检测到第一个“ comments - statement - comments ”。
下一个块也将被检测到,但仅作为:“ statement - comments ”,然后是“ statement - comments ”,依此类推。 (上述声明的评论是前一声明下面评论的一部分)