字符串中的reqexp最佳匹配

时间:2018-12-09 09:52:43

标签: regex

我有一个问题,我正在玩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个匹配项,因为第二线不包含([....])匹配项,如果它存在其他匹配项,我希望它接受该匹配项。

我已经尝试了很多,但我想我不太愿意理解它,所以希望我能得到帮助。

1 个答案:

答案 0 :(得分:2)

您需要将可选部件放入一个非捕获组,并用?将该非捕获组设为可选。另外,为了提高图案的效率,并确保组仅匹配所需的内容而不再匹配,您应重复紧跟组的字符的否定比使用.*(需要回溯):

(\S*) (?:\[([^\]]*)] )?\((\S*) (.*) \[(\S*)]

https://regex101.com/r/b3wxun/2