繁体   English   中英

多行字符串的Java正则表达式

[英]java regex for multiline String

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);

你需要逃避一些特殊字符( (). ),并使用\\s匹配空白:

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

正则表达式演示

请注意,将它与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演示

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 )+" ]");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM