我有一个问题,我正在玩reqexp,现在我遇到了一个小问题,找不到解决方法,所以该问时间了。
我有这2行要重新显示。
netplan.io [0.36.3] (0.40.1~18.04.3 Ubuntu:18.04/bionic-updates [amd64])
nplan (0.40.1~18.04.3 Ubuntu:18.04/bionic-updates [all])
我今天的reqexp看起来像这样。忽略大小写,全局和多行。
(.*) \[(.*)] \((.*) (.*) \[(.*)]
我现在的重生是
Match 1
Full match 0-71 `netplan.io [0.36.3] (0.40.1~18.04.3 Ubuntu:18.04/bionic-updates [amd64]`
Group 1. 0-10 `netplan.io`
Group 2. 12-18 `0.36.3`
Group 3. 21-35 `0.40.1~18.04.3`
Group 4. 36-63 `Ubuntu:18.04/bionic-updates`
Group 5. 65-70 `amd64`
问题是我只得到1个匹配项,因为第二线不包含([....])匹配项,如果它存在其他匹配项,我希望它接受该匹配项。
我已经尝试了很多,但我想我不太愿意理解它,所以希望我能得到帮助。
答案 0 :(得分:2)
您需要将可选部件放入一个非捕获组,并用?
将该非捕获组设为可选。另外,为了提高图案的效率,并确保组仅匹配所需的内容而不再匹配,您应重复紧跟组的字符的否定比使用.*
(需要回溯):
(\S*) (?:\[([^\]]*)] )?\((\S*) (.*) \[(\S*)]