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
71
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