Reputation: 77
I need to make a reg expression that will match following conditions:
1) mathing only if it has three words 2) not separated or separated by semicolon (;) 3) in any order 4) all of words should be included, otherwise it will not match
I tried this one:
^(?=(.*;|)one)(?=(.*;|)two)(?=(.*;|)three).*$
but somehow it mathes variants like oneasfafasfsaf;two;three it`s wrong
please, help!
P.S. sometimes it`s needed to have more than three, but i want to understand the core
Upvotes: 4
Views: 345
Reputation: 67968
(one|two|three);?(?!\1)(one|two|three);?(?!\2)(one|two|three)
Try this.See demo.
http://regex101.com/r/hQ1rP0/41
Upvotes: 1
Reputation: 12389
You could capture all 3 and check for each exists, then, if string is only composed of the 3 words:
^(?=.*?(one))(?=.*?(two))(?=.*?(three))(?:(?:\1|\2|\3);?){3}$
See test at regex101.com (explanation on the right); Regex FAQ
Upvotes: 6