Match list of words without the list of chars around
pattern-matching, regex, regex-group
Solution
Since your capture groups define explicitly one character on either side of the common word, it's looking for `space` `word` `space` and then when it doesn't find another `space`, it fails.
In this case, since you don't want to match all the characters word boundary's would catch (period, apostrophe, etc.) you need to use a bit of trickery with lookaheads, lookbehinds, and non-capture groups. Try this:
(?:^|(?<= ))(one|common|word|or|another)(?:(?= )|$)
http://regex101.com/r/cM9hD8
Word boundaries are still simpler to implement, so for reference sake, you could also do this (though it would include `'`, `.`, etc.).
\b(one|common|word|or|another)\b
Problem
I have this regex ``` (?:$|^| )(one|common|word|or|another)(?:$|^| ) ``` which matches fine unless the two words are next to each other. ``` One one's more word'word common word or another word more another More and more years to match one or more other strings And common word things and or ``` In the above it matches `one` in line two but not the `or` just next to it. Same for `common` and `word` int the third line. Live Example: http://regex101.com/r/hV3wQ3 I believe it's something to do with the non-matching groups' number. But, I am not sure how to achieve the end goal of matching all the list of words without any char around them. I do not want the `one` in `one's` or the word in `word'word` to be matched.