我有一个类似
的源文件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);
我得到的字符串直到行尾。因为.+
在该行的末尾退出。
答案 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
};