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

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

5 réponses

Meilleure réponse
Messages postés
25
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
26 avril 2012
1
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 135 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_saizonou
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
22 août 2018
53
0
Merci
De tete, je dirai simplement :

PRINT\s'.+'

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
Messages postés
6
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
26 août 2011
0
Merci
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.
Commenter la réponse de tibo3374
Messages postés
6
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
26 août 2011
0
Merci
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.
Commenter la réponse de tibo3374
Messages postés
5
Date d'inscription
jeudi 11 juin 2009
Statut
Membre
Dernière intervention
20 janvier 2012
0
Merci
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.
Commenter la réponse de internetdev