首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式以匹配to脚本中的所有注释

正则表达式以匹配to脚本中的所有注释
EN

Stack Overflow用户
提问于 2011-10-07 16:51:32
回答 9查看 17.5K关注 0票数 12

我需要一个正则表达式来捕获T块中的所有注释。表达式将需要使用.Net Regex类。

假设我有以下the:

代码语言:javascript
运行
复制
-- This is Comment 1
SELECT Foo FROM Bar
GO

-- This is
-- Comment 2
UPDATE Bar SET Foo == 'Foo'
GO

/* This is Comment 3 */
DELETE FROM Bar WHERE Foo = 'Foo'

/* This is a
multi-line comment */
DROP TABLE Bar

我需要捕捉所有的评论,包括多行评论,这样我就可以去掉它们。

编辑:拥有一个包含所有内容的表达式(除了注释)将具有相同的目的。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-10-07 17:31:16

这应该是可行的:

代码语言:javascript
运行
复制
(--.*)|(((/\*)+?[\w\W]+?(\*/)+))
票数 21
EN

Stack Overflow用户

发布于 2012-12-11 14:35:21

在PHP中,我使用这段代码取消注释SQL (这是注释版-> x修饰符):

代码语言:javascript
运行
复制
trim( preg_replace( '@
(([\'"]).*?[^\\\]\2) # $1 : Skip single & double quoted expressions
|(                   # $3 : Match comments
    (?:\#|--).*?$    # - Single line comment
    |                # - Multi line (nested) comments
     /\*             #   . comment open marker
        (?: [^/*]    #   . non comment-marker characters
            |/(?!\*) #   . not a comment open
            |\*(?!/) #   . not a comment close
            |(?R)    #   . recursive case
        )*           #   . repeat eventually
    \*\/             #   . comment close marker
)\s*                 # Trim after comments
|(?<=;)\s+           # Trim after semi-colon
@msx', '$1', $sql ) );

简短版本:

代码语言:javascript
运行
复制
trim( preg_replace( '@(([\'"]).*?[^\\\]\2)|((?:\#|--).*?$|/\*(?:[^/*]|/(?!\*)|\*(?!/)|(?R))*\*\/)\s*|(?<=;)\s+@ms', '$1', $sql ) );
票数 9
EN

Stack Overflow用户

发布于 2011-10-07 17:40:32

使用此代码:

代码语言:javascript
运行
复制
StringCollection resultList = new StringCollection(); 
try {
Regex regexObj = new Regex(@"/\*(?>(?:(?!\*/|/\*).)*)(?>(?:/\*(?>(?:(?!\*/|/\*).)*)\*/(?>(?:(?!\*/|/\*).)*))*).*?\*/|--.*?\r?[\n]", RegexOptions.Singleline);
Match matchResult = regexObj.Match(subjectString);
while (matchResult.Success) {
    resultList.Add(matchResult.Value);
    matchResult = matchResult.NextMatch();
} 
} catch (ArgumentException ex) {
// Syntax error in the regular expression
}

通过以下输入:

代码语言:javascript
运行
复制
-- This is Comment 1
SELECT Foo FROM Bar
GO

-- This is
-- Comment 2
UPDATE Bar SET Foo == 'Foo'
GO

/* This is Comment 3 */
DELETE FROM Bar WHERE Foo = 'Foo'

/* This is a
multi-line comment */
DROP TABLE Bar

/* comment /* nesting */ of /* two */ levels supported */
foo...

生产这些火柴:

代码语言:javascript
运行
复制
-- This is Comment 1
-- This is
-- Comment 2
/* This is Comment 3 */
/* This is a
multi-line comment */
/* comment /* nesting */ of /* two */ levels supported */

这并不是说这将只匹配2层嵌套注释,尽管在我的生活中,我从未见过不止一个级别被使用。永远不会。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7690380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档