Hi all,

-----Code------

re = [
  /(one).+?(three).+?(five)/,
  /(one).+?(three)?.+?(five)/,
  /(one).+?(three|).+?(five)/,
  /(one).+(three|).+?(five)/
]

re.each_with_index do |r, idx|
  puts idx
  p "one two three four five".scan(r)
  p "one two four five".scan(r)
end

-----Result---------

0
[["one", "three", "five"]]
[]
1
[["one", nil, "five"]]
[["one", nil, "five"]]
2
[["one", "", "five"]]
[["one", "", "five"]]
3
[["one", "", "five"]]
[["one", "", "five"]]


-----------------

All regexes failed my expectation.

What I want is

"one two three four five" #=> [["one", "three", "five']]
"one two four five" #=> [["one", nil, "five']]

In short, in the string, "three" might or might not exist.
What regex can match for both?

Thanks.

Sam