2009-10-09 6 views
3

J'ai créé un CLR dans un serveur de base de données SQL 2005. C'est une simple fonction d'expression régulière définie par l'utilisateur qui va vérifier si un motif existe dans la chaîne que je passe dans la fonction.ignorer la casse avec l'expression régulière

Le point net du code que j'utilise dans le CLR est indiqué ci-dessous: si une correspondance est trouvée

Return System.Text.RegularExpressions.Regex.IsMatch("Input", "pattern") 

Ce retourne une valeur binaire de 1.

Le modèle que je me sers est

+(Create|Alter) +(Proc|Procedure) + 

Ce que je veux que ce faire est de trouver des cas de « créer ou modifier » « procédure ou proc » quel que soit le cas. Comment puis-je obtenir l'expression pour ignorer le cas?

J'ai essayé

/ +(Create|Alter) +(Proc|Procedure) +/i 

mais cela ne fonctionne pas.

EDIT: J'ai regardé autour sur internet et utilisé diverses suggestions. Aucun de ceux qui ont travaillé ou je me suis trompé. Si quelqu'un pouvait me donner un motif qui ignorera le cas, ce serait très apprécié!

Réponse: Ce que je cherchais à obtenir était une expression régulière qui ignore la casse. Dot Net a des paramètres qui peuvent être passés pour définir le cas d'ignorance, mais étant dans un CLR signifie que je n'ai pas la possibilité de transmettre les paramètres à la fonction.

Le modèle qui permet d'atteindre c'est: + (Créer | Alter) + (Proc | Procédure) +

Répondre

3

Vous pouvez utiliser la ligne "insensible à la casse" modificateur (?i) (i?):

 
(?i) +(Create|Alter) +(Proc|Procedure) + 
+0

Est-ce que l'espace entre (? I) et + faire paraître un espace? – Greg

+1

Cet espace faisait partie du modèle original - donc je l'ai laissé intacte. – Tomalak

+0

C'est exactement ce que je cherchais merci! Testé et fonctionne! L'espace et le signe + signifient qu'il peut y avoir une quantité quelconque d'espaces avant la création ou l'altération. – MarcoF

2

Essayez d'utiliser:

Regex regex = new Regex(
    regexStringHere, 
    RegexOptions.IgnoreCase); 

return regex.IsMatch(inputStringHere); 

Hope this helps.

3

essayer.

Return System.Text.RegularExpressions.Regex.IsMatch("input", @".*(Create|Alter).+(Proc|Procedure).+", RegexOptions.IgnoreCase); 

Je recommande d'installer le logiciel gratuit Expresso pour tester vos expressions régulières et générer .Net/C# code pour la recherche, remplacer, etc

+2

+1 Expresso est génial. – JCasso

+0

@jcasso: Je ne sais pas si votre appréciation pour un aparté non justifié justifie une mise à jour. ;-) – Tomalak

+0

@Tomalak: Le questionneur a des problèmes avec la création d'une regex. S'il utilisait Expresso, il remarquerait qu'il existe une option "IgnoreCase". Ne pas upvote signifie-t-il que c'est utile? – JCasso

Questions connexes