Perché l’ordine delle alternative è importante in regex?

Codice

using System; using System.Text.RegularExpressions; namespace RegexNoMatch { class Program { static void Main () { string input = "a foobar& b"; string regex1 = "(foobar|foo)&?"; string regex2 = "(foo|foobar)&?"; string replace = "$1"; Console.WriteLine(Regex.Replace(input, regex1, replace)); Console.WriteLine(Regex.Replace(input, regex2, replace)); Console.ReadKey(); } } } 

Uscita prevista

 a foobar b a foobar b 

Uscita effettiva

 a foobar b a foobar& b 

Domanda

Perché la sostituzione non funziona quando l’ordine di “foo” e “foobar” nel modello regex è cambiato? Come risolvere questo?