[英]Cant Find REGEX match for Multiline String
我正在尝试使正则表达式搜索字符串以查找多行模式。 字符串的示例是:
!
map-class frame-relay TempMap_1
frame-relay cir 1536000
frame-relay bc 15360
frame-relay mincir 281000
frame-relay adaptive-shaping becn
service-policy output AB_TEMP_F1536K_0-256K-384K-128K_18
logging trap debugging
logging source-interface Loopback1
logging 136.91.111.21
我要提取的匹配字符串是
map-class frame-relay TempMap_1
frame-relay cir 1536000
frame-relay bc 15360
frame-relay mincir 281000
frame-relay adaptive-shaping becn
service-policy output AB_TEMP_F1536K_0-256K-384K-128K_18
我有的模式
map-class frame-relay TempMap_1[]*
Pattern pattern = Pattern.compile("map-class frame-relay TempMap_1[]*", Pattern.DOTALL);
我不太确定要放入[]以使正则表达式起作用。 我正在使用Java和Pattern.DOTALL来匹配字符串。 任何帮助,将不胜感激。
使用Java 8 ,您可以在此处利用缩进并使用
String regex = "map-class frame-relay TempMap_1.*(?:\\R\\h+.*)*";
参见regex演示 。 不要使用Pattern.DOTALL
这种模式。
细节
map-class frame-relay TempMap_1
文字子字符串 .*
-该行的其余部分 (?:\\\\R\\\\h+.*)*
-0个以下连续序列:
\\\\R
一个换行符序列(在Java 7中,使用(?:\\r\\n?|\\n)
) \\\\h+
-1+水平空格(在Java 7中,使用[^\\\\S\\r\\n]+
) .*
-该行的其余部分。 Java演示 :
String s = "!\nmap-class frame-relay TempMap_1\n frame-relay cir 1536000\n frame-relay bc 15360\n frame-relay mincir 281000\n frame-relay adaptive-shaping becn\n service-policy output AB_TEMP_F1536K_0-256K-384K-128K_18\nlogging trap debugging\nlogging source-interface Loopback1\nlogging 136.91.111.21";
Pattern p = Pattern.compile("map-class frame-relay TempMap_1.*(?:\\R\\h+.*)*");
Matcher m = p.matcher(s);
List<String> res = new ArrayList<>();
while(m.find()) {
res.add(m.group());
}
System.out.println(res);
输出:
[map-class frame-relay TempMap_1
frame-relay cir 1536000
frame-relay bc 15360
frame-relay mincir 281000
frame-relay adaptive-shaping becn
service-policy output AB_TEMP_F1536K_0-256K-384K-128K_18]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.