re = /<mrow[^>]*>\(?((?:(?!<\/?mrow\b[^>]*>).)*?)\)?<\/mrow>/m
str = '<msub><mi>y</mi><mrow>(<mi>n</mi><mo>+</mo><mn>1</mn>)</mrow></msub><mo>=</mo><msub><mi>y</mi><mrow>(<mi>n</mi><mo>-</mo><mn>1</mn>)</mrow></msub><mo>*</mo><msup><mrow>(<msub><mi>y</mi><mi>n()</mi></msub>)</mrow><mrow><mn>2</mn></mrow></msup>
<mrow>(<mn>1000001</mn>)</mrow>'
# 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