2010-07-16 4 views
1

J'écris un programme qui utilise regex pour faire correspondre les données entrantes. L'expression régulière fonctionne sur l'ordinateur sur lequel je code, mais cela ne fonctionne pas sur l'ordinateur client sur lequel je suis en train de tester. Il fonctionne sur mon ordinateur en mode débogage, en mode release, et s'exécute directement à partir de la corbeille. Qu'est-ce qui pourrait faire fonctionner une regex différemment?Regex fonctionne différemment sur différents ordinateurs

Regex:

const string _pattern 
    = @"^(?:\x02)?([A-Z])(ST)([WS])([1-9])([ AM])([ NSEWIO])([- ]\d{6})([ M])([1CPN])(\w)?(?:\x0D)?$"; 
static readonly Regex _regex 
    = new Regex(_pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled); 

Chaîne:

@"ASTS2MI-000020 C0" 
+1

L'exécutable a-t-il exactement la même version sur les deux machines? –

+1

Oui, l'exécutable le fait. Mais cela m'a fait réfléchir ... et j'ai réalisé que l'expression rationnelle était dans une * bibliothèque *, ce qui n'était pas la même chose. Je les ai changés et ça a très bien fonctionné. ** D'oh ** – dlras2

Répondre

6

Probablement vous avez besoin CultureInvariant:

static readonly Regex _regex 
    = new Regex(_pattern, RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.Compiled); 

Comme expliqué à Performing Culture-Insensitive Operations in the RegularExpressions Namespace, par defaul t la correspondance insensible à la casse prend en compte Thread.CurrentCulture.

+0

Techniquement, ce n'était pas * mon * problème, mais c'est une excellente réponse à ma question. – dlras2

Questions connexes