单行java注释的正则表达式

时间:2014-06-20 05:37:36

标签: java regex

我是正则表达式的新手,我使用这个if[\\s]*\\([^\\)]*\\)[\\s]*\\{((/\\*(.|[\\r\\n])*?\\*/)|\\s)*\\}找到空的IF语句,并且它使用空语句但没有找到单行注释的精细多行注释。它找到了以下场景

if (true) {

        /*
         * fsdsddgd ddgdgdfg gdfgdgdfg gdfgdfg fgdfgfg
         */

        /*
         * fsdsddgd ddgdgdfg gdfgdgdfg gdfgdfg fgdfgfg
         */
    }

if (true) {


    }

找不到以下情景

if (true) {
        // kavi
        // kamal
        // kamal
    }

    if (true) {
        // kavi
    }

请为此提供有价值的解决方案。

1 个答案:

答案 0 :(得分:3)

不是一个好主意,但如果你必须......

正如你在评论中看到的那样,我并不十分喜欢这个想法,但是既然你提出了这个想法,那么这将符合你的意见(见demo):

if\s*\([^\{]*\{(?:[ \t]*//.*)?[ \t]*(?:[\r\n]*[ \t]*(?://.*)?)*[\r\n]*[ \t]*(?://.*)?}
  • if\s*\([^\{]*\{让我们到了大括号
  • (?:[ \t]*//.*)?[ \t]*让我们到达行尾,与
  • 中的可选评论相匹配
  • (?:[\r\n]*[ \t]*(?://.*)?)*匹配一系列带有可选评论的行
  • [\r\n]*[ \t]*(?://.*)?}让我们进入最后的支撑。

需要正确转义令牌,因此请尝试以下代码:

List<String> matchList = new ArrayList<String>();
try {
    Pattern regex = Pattern.compile("if\\s*\\([^\\{]*\\{(?:[ \t]*//.*)?[ \t]*(?:[\r\n]*[ \t]*(?://.*)?)*[\r\n]*[ \t]*(?://.*)?}");
    Matcher regexMatcher = regex.matcher(subjectString);
    while (regexMatcher.find()) {
        matchList.add(regexMatcher.group());
    } 
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}

否则

在评论中,您可能不希望else if

在这种情况下,请使用:

(?<!else )if\s*\([^\{]*\{(?:[ \t]*//.*)?[ \t]*(?:[\r\n]*[ \t]*(?://.*)?)*[\r\n]*[ \t]*(?://.*)?

在代码中:

List<String> matchList = new ArrayList<String>();
try {
    Pattern regex = Pattern.compile("(?<!else )if\\s*\\([^\\{]*\\{(?:[ \t]*//.*)?[ \t]*(?:[\r\n]*[ \t]*(?://.*)?)*[\r\n]*[ \t]*(?://.*)?");
    Matcher regexMatcher = regex.matcher(subjectString);
    while (regexMatcher.find()) {
        matchList.add(regexMatcher.group());
    } 
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}

如果您有任何疑问,请告诉我们。