re = /(?<!SQ\d{0}|\d|\d{2})(51\d{14}|52\d{14}|53\d{14}|54\d{14}|55\d{14}|36\d{12}|34\d{13}|37\d{13}|4\d{15}|4\d{12}|\d{4}(-|\s)\d{4}(-|\s)\d{4}(-|\s)\d{4}|\d{3}(-|\s)\d{3}(-|\s)\d{3}(-|\s)\d{3}(-|\s)\d{3}|\d{4}(-|\s)\d{6}(-\s)\d{5}|6\d{15})/m
str = '<Payment>
<PCard expiration="2061-04-00" name="Grainger AB" number="41111111111111114222222222222"/>
</Payment>
<PCard expiration="2022-04" number="4005-5511-2233-4450"/>
<Payment>
Space
<PCard expiration="2022-04" number="4005 5511 2233 4450"/>
Tab space
<PCard expiration="2022-04" number="4005 551122334450"/>
<PCard expiration="2022-04" number="4005 5511 2233 4450"/>
new line
<PCard expiration="2022-04" number="4005400540054005"/>
<PCard expiration="2022-04" number="4005 5511 2233 4450"/>
carriage return
<PCard expiration="2022-04" number="4005 5511 2233 4450"/>
</Payment>
combination of
<Payment>
<PCard expiration="2022-04" number="4005- 5511 -2233-4450"/>
</Payment>
<PCard expiration="2061-04-00" name="Grainger AB" number="4255726800010"/>
<PCard expiration="2061-04-00" name="Grainger AB" number="@#@@@$@4255726800010"/>
<PCard expiration="2061-04-00" name="Grainger AB" number="SQ#4255726800010"/>
<PCard expiration="2061-04-00" name="Grainger AB" number="45a$4255726800010"/>
<PCard expiration="2061-04-00" name="Grainger AB" number="12SQ%4255726800010"/>
<PCard expiration="2061-04-00" name="Grainger AB" number="4255726800010@121212"/>
<PCard expiration="2061-04-00" name="Grainger AB" number="4255726800010#SQ"/>
<PCard expiration="2061-04-00" name="Grainger AB" number="4255726800010$a54"/>
<PCard expiration="2061-04-00" name="Grainger AB" number="4255726800010%SQ12"/>
<SupplierPartID>4222222222222</SupplierPartID>
<SupplierPartID> 4222222222222</SupplierPartID>
<SupplierPartID>SQ4222222222222</SupplierPartID>
<SupplierPartID>SQ134222222222222</SupplierPartID>
<SupplierPartAuxiliaryID>WWGSQ134256726800010</SupplierPartAuxiliaryID>
'
# 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