我有一个具有 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]
我现在的注册前是/\[(.*)\]/
尝试将其更改为以下内容:
/\[([^\]]*)\]/
您当前行为的问题.*
是贪婪,因此您将从第一个匹配[
到最后一个]
。通过更改.*
为[^\]]*
you 将仅匹配不是]
.
或者,您可以使用.*?
代替.*
,它是惰性的(匹配尽可能少的字符)。
正如 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"