re = /# Step 1: match all summary tags and skip them using recursive regexes !
(
<summary>
(?:
(?:(?!<\/?summary\s*>)[\s\S])
|
(?1)
)*
<\/summary\s*>
)
(*SKIP)(*FAIL)
|
# Step 2 : make sure the line doesn't start with bla or function
^(?!\s*(?:function|bla)\s*update)
# Step 3 : just match
.*?update.*/mix
str = '<summary>
update record \'djk\'
</summary>
<tester>
function update record \'djk\'
update record \'djk\'
function method update record \'djk\'
bla update
</tester>'
# 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