re = /^(?=.*key1=[a-z0-9,]*d[1-4])(?=.*(?:key1=[a-z0-9,]*a[12]|key2=[a-z0-9,]*b[123]|key3=[a-z0-9,]*c[123])).+/m
str = 'key1=a2,d3
key2=b1,b3key1=d1
key2=b2key3=c3,a2key1=d4
key1=d2abckey2=b2,b3key1=a1
key1=d2
key1=a1key2=b1
key2=b2key3=a1
key1=a2,d3
key1=d3,a2'
# 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