re = /(?:UniquePrefixA|UniqueB|UniqueC)\s*(\[some-token\])(?:and|\s)*(\[some-token\])?(\s|[^\[\]])*(\[some-token\])?(\s|[^\[\]])*(\[some-token\])?(\s|[^\[\]])*/i
str = 'Examples 1-3:
[1] UniquePrefixA [some-token] and [some-token] want to take [some-token] to see some monkeys.
[2] UniqueC [some-token] wants to take [some-token] to the store. UniqueB, [some-token] is in the pattern once more.
[3] UniquePrefixA [some-token] is using [some-token] to [some-token].
'
# Print the match result
str.scan(re) do |match|
puts match.to_s
end
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html