2009-02-26 4 views
0

Je veux extraireS'il vous plaît aidez-moi à créer une expression régulière pour analyser mon instruction SQL

FROM codes WHERE FieldName='ContactMethod' and IsNull(Deactived,'') != 'T' 

de

SELECT FieldDescription,FieldValue FROM codes WHERE FieldName='ContactMethod' 
    and IsNull(Deactived,'') != 'T' order by fielddescription 

utilisant une expression régulière. J'ai un regex comme ceci:

\FROM.*\order 

qui extrait

FROM codes WHERE FieldName='ContactMethod' and IsNull(Deactived,'') != 'T' order 

Aussi, comment puis-je me débarrasser de la capitalisation?

Merci

+0

Quelle est la "saveur" de regex que vous utilisez, dans quel environnement? c'est-à-dire, Perl, .NET, etc –

+0

J'utilise Vb.net – Mithil

Répondre

1

L'astuce ici serait probablement de saisir la partie que vous voulez réellement avec parens:

(FROM.*) order 

Ce sélectionnne goulûment jusqu'au dernier order, si vous voulez seulement jusqu'à la première occurrence, match de paresseusement:

(FROM.*?) order 
+0

Celui-ci fonctionne mais je ne veux pas le mot "Order" Je veux tout à partir du mot "FROM" jusqu'au mot "order" à l'exclusion du mot "Ordre" aussi je le veux insensible à la casse. – Mithil

+0

n'est pas ce que les (parenthèses) sont pour? –

+0

Il me donne encore "FROM codes WHERE FieldName = 'ContactMethod' et IsNull (Désactivé, '')! = 'T' order" – Mithil

0

Si cela revient à ce que vous pouvez ignorer la capitalisation en faisant (F | f) (R | r) (O | o) (m | m).

+0

yup .. qui résout le problème sensible à la casse. Je reçois toujours le mot «commande» que je ne veux pas. J'utilise (from | FROM. *) Order | ORDER – Mithil

+0

Presque toutes les expressions regex prennent en charge un indicateur d'insensibilité à la casse. –

1

Expansion sur la réponse de Fabian Steeg

Dim regex As Regex = New Regex(_ 
      "(FROM.*?) ORDER", _ 
     RegexOptions.IgnoreCase _ 
     Or RegexOptions.CultureInvariant _ 
     Or RegexOptions.IgnorePatternWhitespace _ 
     Or RegexOptions.Compiled _ 
     ) 

    Dim ms As MatchCollection = regex.Matches(InputText) 

où InputText est bien sûr votre chaîne de requête SQL.

ms (1) doivent tenir les parenthèses correspondent

0

outils interactifs comme RegexBuddy (40 $) ou The Regex Coach (gratuit) serait vraiment vous aider à concevoir et débogage des expressions régulières pour la plupart des plates-formes.

Questions connexes