1

我有一个具有 reg ex 的 ruby​​ 脚本,以排除 [] 之间的文本。例如以下:

[29-5-10 : 10.05 | key=3.6]

如果在文件中,前面的表达式只存在一次,我的 reg ex 工作得很好。我需要一个解决以下问题的reg ex:

[29-5-10 : 10.05 | key=3.6]

[29-5-10 : 10.05 | key=3.6]

...布拉..布拉

[29-5-10 : 10.05 | key=3.6]

我现在的注册前是/\[(.*)\]/

4

2 回答 2

2

尝试将其更改为以下内容:

/\[([^\]]*)\]/

您当前行为的问题.*是贪婪,因此您将从第一个匹配[到最后一个]。通过更改.*[^\]]*you 将仅匹配不是].

或者,您可以使用.*?代替.*,它是惰性的(匹配尽可能少的字符)。

于 2012-10-01T16:42:51.707 回答
0

正如 FJ 提到的,您需要一个不贪婪的匹配器。

s = '[29-5-10 : 10.05 | key=3.6] [29-5-10 : 10.05 | key=3.6]'
m = s.scan( /\[([^\]]*)\]/ ).flatten
p *m

将返回

"29-5-10 : 10.05 | key=3.6"
"29-5-10 : 10.05 | key=3.6"

在此处查看现场演示

于 2012-10-01T16:58:27.547 回答