使用正则表达式“有序”扫描

时间:2012-01-25 22:45:06

标签: ruby regex

我有一个String my_string:

[...]
THE_PREFIX value1 THE_SUFFIX
THE_PREFIX value2 THE_SUFFIX
[...]

我想得到每个值(value1,value2,...)。我试过了

my_string.scan(/THE_PREFIX (.*) THE_SUFFIX/m)

但它只返回一个字符串:

value1 THE_SUFFIX THE_PREFIX value2

我怎么能这样做?

修改

每个值都包含许多特殊字符。我不想做与此匹配的正则表达式

2 个答案:

答案 0 :(得分:1)

你的图案太松散了:

my_string.scan(/THE_PREFIX (\w+) THE_SUFFIX/m)

返回:

my_string.scan(/THE_PREFIX (\w+) THE_SUFFIX/m)
=> [["value1"], ["value2"]]

如果您想要一个阵列,请将其展平:

my_string.scan(/THE_PREFIX (\w+) THE_SUFFIX/m).flatten
=> ["value1", "value2"]

答案 1 :(得分:1)

使用不情愿的正则表达式量词:

irb(main):001:0> a = "THE_PREFIX value1 THE_SUFFIX
irb(main):002:0" THE_PREFIX value2 THE_SUFFIX"
=> "THE_PREFIX value1 THE_SUFFIX\nTHE_PREFIX value2 THE_SUFFIX"
irb(main):003:0> a.scan(/THE_PREFIX (.*) THE_SUFFIX/m)
=> [["value1 THE_SUFFIX\nTHE_PREFIX value2"]]
irb(main):004:0> a.scan(/THE_PREFIX (.*?) THE_SUFFIX/m)
=> [["value1"], ["value2"]]