re = /<\s*tag\b[^>]*?(?<=\s)attribute1\s*=\s*\"([^\"]*)\"[^>]*>/i
str = '<tag attribute1="\'text123\'" />
<TAG attribute2="\'true\'" attribute1="\'text1\'"/>
<tag attribute2="\'true\'"/>
< tag
type="apple" title="Golden apple"
ATTRIBUTE1="value" />
<!-- This one should not match -->
<tagger attribute1="something">
<!-- But this one yes -->
<tag data-id="6735"
attribute1="\'some more text\'"
required >
Whatever in here
</tag>
</tagger>
<!--
Should not match if "attribute1" is part of an other attribute name.
As attributes can contain a hyphen, we can\'t use \\battribute1 because \\b
will not consider the hyphen as part of a word. This is why we have to
use the positive lookbehind (?<=\\s)
-->
<tag matching="false" data-attribute1="" />'
# 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