Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在多行上匹配以某些字符开头和结尾的文本_Java_Regex - Fatal编程技术网

Java 在多行上匹配以某些字符开头和结尾的文本

Java 在多行上匹配以某些字符开头和结尾的文本,java,regex,Java,Regex,我有一个类似的源文件 String some_words_come_here{ //some string lines //some string lines //some string lines //some string lines }; 我在java中使用它 Pattern.compile("(?m)^Strin.+\\};$", Pattern.MULTILINE | Pattern.DOTALL); 但这并不奏效 与 我拿到绳子,直到绳子的尽头。

我有一个类似的源文件

String some_words_come_here{
    //some string lines
    //some string lines
    //some string lines
    //some string lines
};
我在java中使用它

Pattern.compile("(?m)^Strin.+\\};$", Pattern.MULTILINE | Pattern.DOTALL); 
但这并不奏效

我拿到绳子,直到绳子的尽头。因为
+
在行尾退出

Pattern.compile("^String[^}]+\\};$", Pattern.MULTILINE);
除非这些行中的某个地方有
}
(除非
字符串前面或后面有空格;

说明:

^String
在行首开始匹配;按字面意思匹配
字符串

[^}]+
匹配除
}
之外的任何字符的一个或多个匹配项

\\}$匹配
}和行尾。反斜杠转义
}
,由于反斜杠本身也需要在Java字符串中转义,因此需要两个

^String .*{\r*[^.*$]*};$
这适用于Kodos工具

Java中的测试:

package mytest;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

    public class Test4 {

     /**
      * @param args
      */
     public static void main(String[] args) {

      StringBuffer sb = new StringBuffer();
      sb.append("String some_words_come_here{").append("\n")
       .append("    //some string lines\n")
       .append("    //some string lines\n")
       .append("    //some string lines\n")
       .append("};\n");
      String regex = "^String .*\\{\\r*[^.*$]*\\};$";
      Pattern p = Pattern.compile(regex);
      Matcher m = p.matcher(sb.toString());
      System.out.println(m.find());
      System.out.println(m.group(0));

     }

    }
输出:

true
String some_words_come_here{
    //some string lines
    //some string lines
    //some string lines
};

第一个“不好用”是以什么方式出现的?我的意思是,我得到了整个字符串的大部分。。。。它与}的第一个计数不匹配;我很抱歉,但我是新加入regex的,我不知道如何关闭该(?m)或它应该如何关闭。我在某个地方读到过,它也是一个字符串中新行的开头,^表示字符串的开头。所以请把你得到的东西贴出来<代码>模式。多行
将使
^
$
在行的开始/结束处匹配。这很有效。你能简单地解释一下这是如何工作的吗?特别是在[^}]+部分
true
String some_words_come_here{
    //some string lines
    //some string lines
    //some string lines
};