java String.split(^}$)为什么不能用,超简单?!

duoshanx 2011-08-30 09:00:55

no-cspf;
label-switched-path To-R5 {
from 1.1.1.1;
to 5.5.5.5;
description test
revert-timer 600;
no-decrement-ttl;
retry-timer 100;
retry-limit 100;
primary R5-s1;
secondary R5-s2 {
select manual;
standby;
}
secondary R5-s4 {
standby;
}
secondary R5-s3;
secondary R5-s5;
}
label-switched-path To-R6 {
from 1.1.1.1;
to 6.6.6.6;
revert-timer 600;
primary R6-s1;
secondary R6-s2 {
standby;
}
secondary R6-s3;
}
path path-l2-vpn-pe30-111 {
10.255.2.10 strict;
}
path path-l2-vpn-pe30-1112 {
10.0.96.10 loose;
}
path R5-s3;
path R6-s1 {
10.10.51.5 strict;
10.10.65.6 strict;
}
path R6-s2 {
10.10.21.2 strict;
10.10.92.9 strict;
10.10.109.10 strict;
10.10.104.4 strict;
10.10.84.8 strict;
10.10.87.7 strict;
10.10.127.12 strict;
10.10.112.11 strict;
10.10.116.6 strict;
}
path R6-s3;
interface ge-0/0/0.0;
interface ge-0/1/0.0;
interface lo0.0;



有show_configuration_protocols_mpls.txt文件一个,包含上面的内容。


File f = new File(sourcePath);
byte[] b = new byte[(int) f.length()];
FileInputStream fi = new FileInputStream("show_configuration_protocols_mpls.txt");
fi.read(b);
String s = new String(b);
String[] sd = s.split("^}$");
System.out.println(sd.length);



想使用}分开,也就是用单行里就一个结束花括号的行分开。
但是结果 sd.length 总是等于0,请问正则表达式应该怎么写呢?
...全文
311 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
duoshanx 2011-08-31
  • 打赏
  • 举报
回复
String[] sd = s.split("(?m)^\\}$");


如果分割符里,不写(?m),可以在java里设定多行模式。


String[] sd =Pattern.compile("^\\}$",Pattern.MULTILINE).split(s);


from javadoc
duoshanx 2011-08-31
  • 打赏
  • 举报
回复

[Quote=引用 1 楼 shuwei003 的回复:]

因为你把所有内容都放在一个字符串里了,这个字符串不会以}开头使用 String[] sd = s.split("\\}");即可。注意转义。
[/Quote]
是我没有说明白,不是所有的}都分开,想以前面没有空格的}分开。
谢谢再次关注。


[Quote=引用 3 楼 k3108001263 的回复:]

你要的答案是什么?嵌套的括号你想怎样处理,好像士大夫你发了很多关于正则表达式的帖,你有没有表述清楚呢?
[/Quote]
这次是我没有说明白。这次的问题主要是换行的时候,行头标志和行尾标志不起作用,所以想问一下。


[Quote=引用 4 楼 goldenfish1919 的回复:]

Java code

String[] sd = s.split("(?m)^\\s*}$");

[/Quote]

非常感谢。彻底明白了(?m)的用途。

在多行模式(?m)下,以换行为基点,可以使用^和$。
默认情况下(不使用多行模式的情况下),这些表达式只匹配整个输入序列的开头和结尾
的。
若鱼1919 2011-08-30
  • 打赏
  • 举报
回复

public static void main(String[] args)throws Exception {
File f = new File("1.txt");
byte[] b = new byte[(int) f.length()];
FileInputStream fi = new FileInputStream(f);
fi.read(b);
String s = new String(b);
String[] sd = s.split("(?m)^\\s*}$");
System.out.println(sd.length);
for(int i=0;i<sd.length;i++){
System.out.println(sd[i]);
System.out.println("----------------------");
}
}
打油的程序员 2011-08-30
  • 打赏
  • 举报
回复
你要的答案是什么?嵌套的括号你想怎样处理,好像你发了很多关于正则表达式的帖,你有没有表述清楚呢?
softroad 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 shuwei003 的回复:]

因为你把所有内容都放在一个字符串里了,这个字符串不会以}开头使用 String[] sd = s.split("\\}");即可。注意转义。
[/Quote]、

+1
shuwei003 2011-08-30
  • 打赏
  • 举报
回复
因为你把所有内容都放在一个字符串里了,这个字符串不会以}开头使用 String[] sd = s.split("\\}");即可。注意转义。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧