在多行上匹配文本,以一些字符开头和结尾

时间:2010-03-09 13:36:44

标签: 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); 

但是效果不好

Pattern.compile("(?m)^Strin.+", Pattern.MULTILINE); 

我得到的字符串直到行尾。因为.+在该行的末尾退出。

2 个答案:

答案 0 :(得分:1)

Pattern.compile("^String[^}]+\\};$", Pattern.MULTILINE);

应该有效,除非这些行中的某个地方有}(除非在String之前或};之后有空格)。

说明:

^String在该行的开头开始匹配;按字面意思匹配String

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

\\};$匹配};和行尾。反斜杠会转义},因为反斜杠本身也需要在Java字符串中转义,所以你需要其中两个。

答案 1 :(得分:0)

^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
};