java regex for multiline String

时间:2016-11-23 09:24:06

标签: regex

begin
    dbms_utility.compile_schema(user, false);
end;

我可以获得上面的字符串的正则表达式吗? 我使用下面的正则表达式

Pattern regex = Pattern.compile("begin*dbms_utility.compile_schema(user, false);*end;",Pattern.MULTILINE|Pattern.DOTALL);
        Matcher regexMatcher = regex.matcher(newtext);
        if (regexMatcher.find()) {
            System.out.println(regexMatcher.group(1));
            System.out.println("second regex : "+regexMatcher);

2 个答案:

答案 0 :(得分:0)

您需要转义一些特殊字符(().)并使用\s来匹配空格:

"begin\\s*dbms_utility\\.compile_schema\\(user,\\s*false\\);‌​\\s*end;"

请参阅regex demo

请注意,将其与find()一起使用会在较长的字符串中找到任何子字符串,并且使用带有Matcher#matches()的表达式只会在整个字符串与模式匹配时返回true。

要获得完整匹配,请使用Matcher.group(0)获取捕获组值,使用高于0的索引。

String regex = "begin\\s*(dbms_utility\\.compile_schema\\(user,\\s*false\\);)\\s*end;";
String string = "begin\n    dbms_utility.compile_schema(user, false);\nend;";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}

查看Java demo

答案 1 :(得分:0)

Pattern p = Pattern.compile("DS \\#18 \\[([0-9\\.]*)\\\\([0-9\\.]*)\\] Pixel Spacing",
                            Pattern.MULTILINE|Pattern.DOTALL); 
Matcher m = p.matcher( input );
while( m.find() ) {
    System.out.println("[ "+m.group( 1 )+", "+m.group( 2 )+" ]");
}