Problème regex avec répétition d'un caractère

Résolu
tibo3374 Messages postés 6 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 26 août 2011 - 18 août 2011 à 11:41
internetdev Messages postés 5 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 20 janvier 2012 - 20 janv. 2012 à 14:58
Bonjour,

Je développe une application en C#, j'ai besoin dans celle ci de pouvoir extraire des chaînes à partir d'un fichier sql.
L'objectif de la regex est de pouvoir matcher sur cette chaîne :
PRINT 'Une erreur s''est produite lors de l''exécution de la transaction 17950'

Après plusieurs tests je suis arrivé à ce pattern :
PRINT\s'(.*?)[^('')]'

Ce qui me donne comme résultat (j'utilise expresso pour tester les regex) :
PRINT 'Une erreur s'

Le problème c'est que cela match dès la première occurrence d'une quote, j'aimerais que cela ne match pas quand il y a 2 quotes à la suite, mais je ne trouve pas la syntaxe.

Si quelqu'un avait une idée sur le problème.

Merci.

5 réponses

cs_saizonou Messages postés 21 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 26 avril 2012 6
25 août 2011 à 17:27
Cela devrait fonctionner :
PRINT\s+'[^\d]*\d+'

explication :
PRINT : Commence par les caractères PRINT
\s* : 1 ou plusieurs aspaces
' : le caractère '
[^\d]* : Tous les caractères sauf digitaux
\d+' : et enfin une suite d'au moins un chiffre et le caractère '




SAIZONOU Landry
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 août 2011 à 12:37
De tete, je dirai simplement :

PRINT\s'.+'

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
tibo3374 Messages postés 6 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 26 août 2011
23 août 2011 à 09:48
Déjà merci de m'aider, ensuite j'ai testé ta regex, elle fonctionne dans le cas ou il n'y a qu'un seul PRINT :
ex :PRINT 'Une erreur s''est produite lors de l''exécution de la transaction 17950'

Le problème c'est que mon fichier sql comporte plusieurs fois cette syntaxe :
PRINT 'Une erreur s''est produite lors de l''exécution de la transaction 17950' PRINT 'Une erreur s''est produite lors de l''exécution de la transaction 17951' etc...

Avec ta regex il ne fait plus la différence entre les différents PRINT, il match qu'une seule fois (au lieu de 2), il donne comme résultat de recherche :
PRINT 'Une erreur s''est produite lors de l''exécution de la transaction 17950' PRINT 'Une erreur s''est produite lors de l''exécution de la transaction 17951'

Alors que le résultat de la recherche devrait être sous cette forme :
PRINT 'Une erreur s''est produite lors de l''exécution de la transaction 17950'
PRINT 'Une erreur s''est produite lors de l''exécution de la transaction 17951'

En tout cas merci pour ton aide.
0
tibo3374 Messages postés 6 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 26 août 2011
26 août 2011 à 14:28
Salut, merci pour ta regex elle marche impeccable sur les chaînes de caractères que j'ai données en exemple.

Le problème c'est qu'il en existe d'autre dans mon fichier de ce style :
PRINT '*** Mise à jour du type de calque Google' PRINT '*** Ajout du type de calque Google'

Et pour le coup il n'y a plus de suite d'au moins un chiffre et le caractère '.
La regex qui marche pour le coup c'est celle ci : PRINT\s+'(.*?)'

Je considère que c'est résolu car je suis pas sur que cela soit possible en 1 étape.
En tout cas merci de votre aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
internetdev Messages postés 5 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 20 janvier 2012
20 janv. 2012 à 14:58
InternetDev

PRINT\s'(.*?)'\s*\;$

-> Dans le cas où la fin de ligne est toujours sur la ligne du PRINT.
Peut importe ce qu'il y a dans les quotes, seules le début et la fin sont les identifiants distinctifs de l'expression qui permettent de l'identifier.

si le début est toujours : PRINT\s+\'
et la fin "'" "espac possible" et "fin de ligne" => '\s*$
Et que l'expression recherche ligne par ligne.
0
Rejoignez-nous