re = /\b(?<!X-MAS\s)TREE\b/
str = 'X-MAS TREE //this sentence should be excluded
BLA BLA TREE //this sentence should be recognized
XMAS TREE
X-MASTREE
X-TREE
X-MASTREE
How to exclude "X-MAS TREE"?
Because all of those regex, will be replace with "X-MAS TREE"
If I search with keyword "TREE", it will be infinite loop, because "X-MAS TREE" has "TREE"
I tried with this combination, but not working:
\\b(XMAS TREE|X\\-MASTREE|X\\-TREE|TREE|(?!X\\-MAS TREE)\\b
\\b(XMAS TREE|X\\-MASTREE|X\\-TREE|(?!X\\-MAS \\s)TREE)\\b
\\b(XMAS TREE|X\\-MASTREE|X\\-TREE|((?!X\\-MAS )|\\w*)TREE)\\b
\\b(XMAS TREE|X\\-MASTREE|X\\-TREE|(?:(?!X\\-MAS) )TREE)\\b'
subst = 'X-MAS TREE'
result = str.gsub(re, subst)
# Print the result of the substitution
puts result
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