单行java注释的正则表达式

单行java注释的正则表达式,java,regex,Java,Regex,我是正则表达式的新手,通过使用这个IF[\\s]*\([^\]]*\\)[\\s]*\\{((/\\*(.\\[\\r\\n])*?\\*/)\\\\\\\s)*\\\}找到空的IF语句,它可以很好地处理空语句的多行注释,但找不到单行注释。它可以找到以下场景 if (true) { /* * fsdsddgd ddgdgdfg gdfgdgdfg gdfgdfg fgdfgfg */ /* * fsdsdd

我是正则表达式的新手,通过使用这个
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
    }

请给我一些有价值的解决方案。

这不是一个好主意,但如果你不得不…

正如您在评论中所看到的,我并不十分喜欢这个想法,但由于您提出了要求,这将与您的输入一起工作(请参阅):

  • 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
}
代码:

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
}
List matchList=new ArrayList();
试一试{

Pattern regex=Pattern.compile(“(?这是你的IDE的工作。你在使用哪个IDE?Eclipse:
编译器/错误/空
注意,如果你的条件中有嵌套的括号,你就无法使它工作。我没有使用Eclipse IDE。但是我为常规exp实践编写了一个示例程序,但这似乎是一场噩梦。我还需要找到单个注释。所以请指导我n regexp.Thanks为什么要在没有正确语法和解析器的情况下解析语言?类快捷方式
\h
在Java->
[^\S\r\n]
[\t]中不可用
也许吧。你确定吗?RB对此很满意。让我仔细检查一下。regexplanet一点也不满意。它似乎只适用于Java 8。嗨,它在Java代码中不起作用。如果\s*([^\{]*\{(?:\h*/.*)\h*(?:[\r\n]*\h*(?:/.*)*[\r\n]*\h*(?:/.*))*。[\r\n]*\h*(?:/.]),在索引19附近获取这个非法/不受支持的转义序列“当匹配此项时。它必须是Caz建议的
\h
。编辑答案后,您可以尝试新的正则表达式吗?
如果\s*([^\{]*\{(?:[\t]*/.\)[\t]*(?:[\r\n]*[\t]*(?:/.*)*[\r\n]*[\t]*(?:/.*)
将在稍后发布Java代码。”。
(?<!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
}