Java 解析Cisco路由器配置块
我正在尝试解析cisco配置。它具有如下所示的缩进结构。有很多像这样的街区。有些街区可能更长<代码>代码>符号表示上述缩进的结束。如何分析块和块下的子块Java 解析Cisco路由器配置块,java,parsing,cisco,Java,Parsing,Cisco,我正在尝试解析cisco配置。它具有如下所示的缩进结构。有很多像这样的街区。有些街区可能更长符号表示上述缩进的结束。如何分析块和块下的子块 例1: XXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX \ XXXXXXXXXXXX \ | XXXXXX | sub-block | block XXXXXX
- 例1:
XXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX \ XXXXXXXXXXXX \ | XXXXXX | sub-block | block XXXXXX | | ! / | ! / XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXX XXXXXX
- 例2:
XXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX \ XXXXXXXXXXXX \ | XXXXXX | sub-block | block XXXXXX | | ! / | XXXXXXXXXXXX \ | XXXXXX | sub-block | ! / | ! / XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXX XXXXXX
- Ex3-真正的Cisco配置:
共有4个街区:vrf myvrfvir address-family ipv4 broadcast import route 10:10 ! export route 20:20 ! ! ! interface Eth6/3/9/4.10 description vlan10 mtu 1500 dot1q vlan 10 ! . . .
- 第一个块名是
vrf myvrfvir
- 第二个块名是
接口GigabitEth0/3/5/3.10
- 第三(子)块是导入路径
- 第四(子)块是导出路径
李>
- 第一个块名是
class Block {
private Map<String, String> data;
private Block parent;
private List<Block> children;
}
我不知道当你按照你的解释(为了清楚起见,我已经重构了一点)发布这篇文章时,你在想什么,
地址族ipv4广播
也应该是一个块?
try (BufferedReader bufferedReader = new BufferedReader(reader)) {
Block block = new Block();
String line, previousIndents = "";
while (null != (line = bufferedReader.readLine()) {
Matcher m = Pattern.compile("^(\\s+)").matcher(line);
if (m.find()) {
String indents = m.group(1);
if (previousIndents.equals(indents)) {
// update current block
} else if (indents.length() > previousIndents.length()) {
// start a new block
Block newBlock = new Block();
newBlock.setParent(block);
block.getChildren().add(newBlock);
block = newBlock;
} else {
// current block finished, return to parent
block = block.getParent();
}
previousIndents = indents;
}
}
}
catch (IOException ioEx) {
throw new ParseException(ioEx);
}