In most regex options, you can use simple scans to make sure some text is present or not somewhere to the right of your current locations, and |you can check alternatives with the rotation operator .
So, we basically have 2 alternatives: is there &somewhere in the line after the first 3 alphabets or not. So we can use
^[A-Za-z]{3}(?:(?=.*&)".*"|(?!.*&).*)$
Watch the regex demo
More details
^ - beginning of line[A-Za-z]{3} - 3 alphabets(?:(?=.*&)".*"|(?!.*&).*) - Any of two alternatives:(?=.*&)".*"- if there is &somewhere in the line ( (?=.*&)) matches ", then any characters are 0+, and then"| - or(?!.*&).*- if there is no &( (?!.*&)) in the string , just match any 0+ characters with ...
$ - end of line.
PCRE, .NET, . PCRE:
^[A-Za-z]{3}(?(?=.*&)".*"|.*)$
^^^^^^^^^^^^^^^^^
(?(?=.*&)".*"|.*) :
(?(?=.*&) - & 0+...".*" - "anything here" -| - , &.* - 0+ (.. 3 ).