【发布时间】:2016-12-02 09:44:01
【问题描述】:
我有以下字符串输入(来自netstat -a 命令):
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 11453 /run/systemd/shutdownd
unix 2 [ ] DGRAM 7644 /run/systemd/notify
unix 2 [ ] DGRAM 7646 /run/systemd/cgroups-agent
unix 5 [ ] DGRAM 7657 /run/systemd/journal/socket
unix 14 [ ] DGRAM 7659 /dev/log
unix 3 [ ] STREAM CONNECTED 16620
unix 3 [ ] STREAM CONNECTED 16621
同时我试图将上面的字符串解析为:
// lines is an array representing each line above
for (int i = 0; i < lines.length; i++) {
String[] tokens = lines[i].split("\\s+");
}
我想将tokens 作为一个包含 7 个条目的数组 [Proto, RefCnt, Flag, Type, State, I-Node, Path]。相反,我得到的数组不包括Flags 下的括号和空的State:
["unix", "2", "[", "]", "DGRAM", "11453", "/run/systemd/shutdownd"]
而不是
["unix", "2", "[]", "DGRAM", "", "11453", "/run/systemd/shutdownd"]
如何修复我的正则表达式以产生正确的输出?
【问题讨论】:
-
使用环视
(?<!\[)\\s+(?!\]) -
@revo 即使有环视,也缺少一个值(对于状态,数组的长度将是 6 而不是 7。