re = /(?<=^CN=)(.*?)(?=\s?,\s?o)/mi
str = 'CN= John Q. Public, O=Agency, C=US
CN= John Q. Public, Jr.,O=Agency, C=US
CN=John Q. Public,O=Agency, C=US
CN=John Q. Pu,blic,O=Agency, C=US
CN=some name,ou=Groups,ou=AAA,ou=DCCOMICS,o=boo berries,c=US
CN=some name, ou=Groups,ou=AAA,ou=DCCOMICS,o=boo berries,c=US
CN=some name-Y- , ou=Groups,ou=AAA,ou=DCCOMICS,o=boo berries,c=US
cn= some name-Y-,ou=Groups,ou=AAA,ou=DCCOMICS,o=boo berries,c=US
cn= some na, o me-Y-,ou=Groups,ou=AAA,ou=DCCOMICS,o=boo berries,c=US
(?<=^CN=) - positive lookahead to find string starts with CN= and discard that match
(.*?) - non greedy seach for any single character
(?=,\\s?ou\\s=|,\\s?o\\s?=)
(?=,\\s?ou\\s=|,\\s?o\\s?=)'
# 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