re = /^[^\W_]+(?:[-_.][^\W_]+){0,3}$/m
str = 'exampletag
example-tag
ex-ample-tag
ex_ample_tag
ex-ample_tag
ex.am-ple_tag
Ex.4m-p1e_t4g
ex-am-pl-et-ag
// and variations where there\'s more than 3 `-` `_` or `.`
-exampletag
// no starting symbols
exampletag-
// no trailing symbols'
# 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