Problème regex avec répétition d'un caractère [Résolu]

Signaler
Messages postés
6
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
26 août 2011
-
internetdev
Messages postés
5
Date d'inscription
jeudi 11 juin 2009
Statut
Membre
Dernière intervention
20 janvier 2012
-
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.
A voir également:

5 réponses

Messages postés
25
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
26 avril 2012
5
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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
61
De tete, je dirai simplement :

PRINT\s'.+'

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
6
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
26 août 2011

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.
Messages postés
6
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
26 août 2011

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.
Messages postés
5
Date d'inscription
jeudi 11 juin 2009
Statut
Membre
Dernière intervention
20 janvier 2012

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.