lcoq
lcoq

Reputation: 10726

"Ordered" scan with regexp

I have a String my_string :

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

And I want to get each value ( value1, value2, ...). I tried

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

but it returns only one String :

value1 THE_SUFFIX THE_PREFIX value2

How could I do that ?

EDIT

Each value contains a lot of special chars. I don't want to do the regexp that match with this

Upvotes: 0

Views: 74

Answers (2)

DNNX
DNNX

Reputation: 6255

Use reluctant regex quantifier:

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"]]

Upvotes: 1

the Tin Man
the Tin Man

Reputation: 160549

Your pattern is too loose:

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

Returns:

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

Flatten it if you want a single array:

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

Upvotes: 1

Related Questions