With your shown samples, please try following.
1st solution:
^(?:([^;]*);){2,3}\1$
Online demo for 1st solution
Explanation: Adding detailed explanation for above.
^(?: ##Matching value from starting of the value here.
([^;]*); ##Creating 1st capturing group which has everything till ; in it, followed by ;.
){2,3} ##Looking for 2 to 3 occurrences of it.
\1$ ##Again matching 1st capturing group value at the end here.
2nd solution:
^([^;]*)(;)(?:\1\2){1,2}\1$
Online demo for 2nd solution
Explanation: Adding detailed explanation for above.
^([^;]*) ##checking from starting of value, a capturing group till value of ; is coming here.
(;) ##Creating 2nd capturing group which has ; in it.
(?: ##Creating a non-capturing group here.
\1\2 ##Matching 1st and 2nd capturing group here.
){1,2} ##Closing non-capturing group here, with occurrences of 1 to 2.
\1$ ##Matching 1st capturing group value here at the end of value.