user3414347
user3414347

Reputation: 77

Regular expression "all three in any order and nothing more"

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

Answers (2)

vks
vks

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

Jonny 5
Jonny 5

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

Related Questions