我正在尝试创建正则表达式来搜索字符串,以寻找多行模式。字符串的一个示例是:
!
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来匹配字符串。任何帮助都将不胜感激。
发布于 2017-11-03 00:16:12
使用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 -一个断行序列(在Java7中,使用(?:\r\n?|\n)就足够了)\\h+ - 1+水平空白空间(在Java7中,使用[^\\S\r\n]+).* -剩下的部分。
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]https://stackoverflow.com/questions/47086196
复制相似问题