IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

REGEX comment je m'y prend?


Sujet :

Langage SQL

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 201
    Points : 597
    Points
    597
    Par défaut REGEX comment je m'y prend?
    Bonsoir voici un tableau avec un champ de lien d'image:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	ID 	lien
           ---------------------------------
    	1 	6ES5308-3UA12.JPG
    	2 	6ES5308-3UA12-A.JPG
    	3 	6ES5308-3UA12-B.JPG
    	4 	6ES5988-3LA11.JPG
     	5 	6ES5955-3LC14.JPG
    	6 	6ES5430-4UA13.JPG
     	7 	6ES5430-4UA13-A.JPG
    	8 	6ES5310-3AB11.JPG
     	9 	6ES5310-3AB11-A.JPG
    j'aimerai que SQL me donne que les lien qui n'ont pas de suffixe -A ou -B ou -C etc...
    donc sur cette liste je souhaite qui selectionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    	1 	6ES5308-3UA12.JPG
    	4 	6ES5988-3LA11.JPG
     	5 	6ES5955-3LC14.JPG
    	8 	6ES5310-3AB11.JPG
    j'ai essayer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM `photos` WHERE lien REGEXP '[^a-z]{1,}-A.jpg]$'
    ici je n'ai pas de résultat
    je souaite que ma regex ne prend pas de donne du champ lien toute les donnée qui possède un suffixe -A.jpg

    merci de votre réponses si vous avez une idée.

  2. #2
    Membre actif Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Points : 273
    Points
    273
    Par défaut
    Bonjour,

    Pour quel SGBDR ? Les images ont-elles toujours la même syntaxe (7 caractères suivi d'un trait d'union suivi de 5 caractères puis l'extension ou -A/B/... et l'extension) ? Si c'est le cas, vous n'avez qu'à utiliser une regexp du genre [a-z0-9]{7}-[a-z0-9]{5}.JPG.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 201
    Points : 597
    Points
    597
    Par défaut
    merci de la réponse
    j'utlise mysql couplé avec php
    maleureusement il peut avoir plus ou moin 7 caractère
    ca peut être
    TSX17
    XBTK1010A ...
    c'est le {1,} qui ne fontionne pas dans ma requête?

  4. #4
    Membre actif Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Points : 273
    Points
    273
    Par défaut
    Si je traduis votre regexp en français : chaîne qui ne contient pas de lettres et qui se termine par -A.jpg]

    Cette regexp pourrait-elle fonctionner comme vous le souhaitez : [a-z0-9-]+[^A-Z-].JPG

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    dans votre cas un LIKE suffit et sera bien plus efficace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE LIEN LIKE '_____________.JPG'
    A +

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Ou peut-être même une simple différence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
      FROM photos
     WHERE SUBSTRING(lien FROM -6 FOR 1) <> '-'

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 201
    Points : 597
    Points
    597
    Par défaut
    merci de toutes ces réponses

    j'ai essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM photos WHERE lien REGEXP '[a-z0-9-]+[^A-Z-].JPG'
    il n'y a aucun résultat (je test ces requêtes directement sur phpmyadmin je n'execute pas la page php)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE LIEN LIKE '_____________.JPG'
    je n'avais pas pensé cette solution mais a quoi sert les "_____" c'est le nombre de caractèrere qui se trouve avant les point jpg.

    dans mon exemple j'ai mis des references qu'on peu défnir en l'avance sa structure mais en fait ca peut être n'importe quoi (tsx17,xbkt,CP01ADRFGHH00.2,P65KR-14-0001144, etc...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
      FROM photos
     WHERE SUBSTRING(lien FROM -6 FOR 1) <> '-'
    je ne comprend pas bien comment utlise t'on substring pourquoi met t'on un -6? c'est l'emplcement du - avant le JPG? et les histoires de chevrons

    en tout qu' a ca l'air de fonctionner

  8. #8
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Je te conseille de lire quelques tutos de SQL.

    Mais pour cette fois, un petit coup de pouce :
    A <> B: A "différent de" B

    _ : caractère générique (% : chaîne de caractère générique)

    SUBSTRING ... -6 : c'est la position de départ de la sous-chaîne que tu veux extraire. Avec le signe négatif, tu pars de la fin.
    Donc si caractères avant la fin de ta chaîne, tu ne veux pas qu'il y ait le signe "-"

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 201
    Points : 597
    Points
    597
    Par défaut
    merci de cette petite explication, je vais essayer de lire un peu plus le tuto (c'est très long...)
    cette regex marche parfaitement.

    maintenant j'aimerais essayer de trouver les article qui n'ont pas d'image
    (lien=NULL)
    voici un petit bout de script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      SUBSTRING(lien FROM -6 FOR 1) <> '-' AND lien IS NULL
    ici me dit qu'il n'y a de donnée, là je pense que c'est normal car si il n'a pas d'image, mais comment je lui dire que je veux aussi les lien qui n'ont pas d'image? si je met OR à la place de AND on dirait que je met a genoux le serveur? ca rame

  10. #10
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    C'est bien OR qu'il te faut.

    Pour le problème de performances, quel est ton SGBD ?
    Quels sont les indexes sur la table ?

  11. #11
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 201
    Points : 597
    Points
    597
    Par défaut
    finalement j'ai fait 2 requête l'un qui cherche un regex et un tiret et l'autre qui cherche uniquement un NULL

    merci encore de m'avoir aidé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/01/2007, 10h50
  2. [Regex] Comment faire une regex nongreedy ?
    Par Bleuarff dans le forum Framework .NET
    Réponses: 5
    Dernier message: 11/08/2006, 10h51
  3. Réponses: 3
    Dernier message: 26/04/2006, 00h07
  4. [Regex] Comment gérer les parenthèses ?
    Par davcha dans le forum Framework .NET
    Réponses: 7
    Dernier message: 27/03/2006, 15h28
  5. [Regex] Comment tester une chaîne ASCII 7bits ?
    Par Raduris dans le forum Framework .NET
    Réponses: 4
    Dernier message: 27/03/2006, 10h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo