2010-02-23 12 views
1

Je pensais que je savais comment écrire regex de base. Sur mon pc x64 dans VS2008, C#, j'écris l'expression rationnelle suivante:C# - Perdu dans Regex - Groupes de correspondance sur différentes machines

private static readonly Regex TagRegex = new Regex(@"\{QTable\((?<key>(.*?))#(?<query>(.*?))#(?<columns>(.*?))#(?<heading>(.*?))#(?<tbl>(.*?))#(?<headers>(.*?))#(?<row>(.*?))\)\}", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.ExplicitCapture | RegexOptions.CultureInvariant); 

Cette regex devrait trouver toutes les entrées comme:

{QTable(XXX#YYY#ZZZ#111#222#333#444)} 

me permet d'utiliser des groupes nommés et choisir chaque clé de valeur , requête etc ... Et dans mon unité test + mode de débogage il fonctionne, même sur mon propre IIS 5.1 (x86) où je déploie l'application cela fonctionne. Toutefois, lorsque je ne le déploie pas sur le serveur de production, il ne lance pas un ney présent dans le dictionnaire lorsque j'essaie d'accéder aux groupes nommés.

+0

Dans '(. *?)', Pourquoi '?' Est-il nécessaire? – Vlad

+0

@Vlad: Cela rend le '. *' 'Non-gourmand - de sorte qu'il ne fera pas que correspondre aveuglément à tout ce qu'il peut, même si cela fait échouer les résultats ultérieurs. –

+1

J'écrirais ([^ #] *) à la place ... les # sont des marqueurs, et il veut correspondre jusqu'au marqueur suivant – tanascius

Répondre

0

Trouvé l'erreur. Bien sûr, un endroit complètement indépendant. Rien de mal avec l'expression rationnelle :). Désolé pour tout inconvénient.