re = /(?:"arrayKey1": (?<arrayKey1>[^"]+),[\n\t ]+"arrayKey2": "(?<arrayKey2>[^"]+)",[\n\t ]+"arrayKey3": "(?<arrayKey3>[^"]+)")(?:[\s\S]*)(?:"anotherKey": "(?<anotherKey>[^"]+)")/m
str = '{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": [
{
"arrayKey1": 1,
"arrayKey2": "something",
"arrayKey3": "somethingelse"
},
{
"arrayKey1": 2,
"arrayKey2": "something2",
"arrayKey3": "somethingelse2"
},
{
"arrayKey1": 3,
"arrayKey2": "something3",
"arrayKey3": "somethingelse3"
}
],
"some very long text here": ""
"anotherKey": "value",
"keylast": "valuelast"
}'
# 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