繁体   English   中英

无法找到多行字符串的REGEX匹配项

[英]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.

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