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
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
(one|two|three);?(?!\1)(one|two|three);?(?!\2)(one|two|three)
Try this.See demo.
http://regex101.com/r/hQ1rP0/41
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With