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语句之间的完整注释块。
我希望正则表达式匹配字符串并形成组:
- SQL语句
- 整个评论块
可以使用任何正则表达式完成吗?
(?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
”,依此类推。 (上述声明的评论是前一声明下面评论的一部分)