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 PHP Discussion :

Trouver un mot et vérifier qu'il n'y a pas avant un autre mot [RegEx]


Sujet :

Langage PHP

  1. #1
    DMC
    DMC est déconnecté
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2002
    Messages : 25
    Points : 39
    Points
    39
    Par défaut Trouver un mot et vérifier qu'il n'y a pas avant un autre mot
    Bonjour,

    Je galère pour trouver une REGEX :

    Dans une chaîne de caractère, je veux trouver un mot et si ce dernier existe, je veux vérifier qu'avant ce dernier il n'y a pas un autre mot.

    Exemple de deux chaines à tester :
    "je veux scroll le texte css verticalement"
    et
    "je veux aligner le texte css verticalement"

    Je chercher "vertic[a-z]+" qui correspond a pour simplifier : "verticalement" ou avec faute de frappe : "verticelement", "verticelemant", ect..

    Si "vertic[a-z]+" est trouvé, je veux vérifier qu'il n'y a pas le mot "scro[a-z]+" qui correspond à pour simplifier : "scroll" ou avec faute de frappe : "scroll", "scrolling", ect..

    Pour info :
    • je suis sûr que "scroll" est avant "verticalement"
    • je veux que "verticalement" soit testé avant "scroll"
    • la position de "verticalement"est variable dans la chaine testée
    • la position de "scroll"est variable entre le début de la chaine testée et la position "verticalement"
    • j'aimerais une faire cela en une seule REGEX car je ne peux pas faire autrement


    Merci pour votre aide

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 888
    Points : 6 632
    Points
    6 632
    Par défaut
    Bon, on va dire que tu cherches "scroll" et "verticalement" pour alléger, après libre à toi d'ajouter une tolérance pour l'orthographe.

    je veux que "verticalement" soit testé avant "scroll"
    Ça, ça va être le plus gros problème: on ne peut pas faire un test arrière de longueur variable avec PCRE.
    Sans cette condition, on pourrait écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /\A\W*+(?:(?!scroll\b|verticalement\b)\w+\W+)*+\Kverticalement\b/
    ce qui serait plus efficace, ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /\A(?s:(?!\bscroll\b).)*?\K\bverticalement\b/
    (plus court, mais plus lent).


    Mais avec cette condition, on est obligé de tester la présence de "verticalement" avec un lookahead ancré au début de la chaîne (pour au final faire la même chose).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /\A(?=.*\bverticalement\b)(?:(?!scroll\b|verticalement\b)\w+\W+)*+\Kverticalement\b/s
    On pourrait également tester la présence de "scroll" dans un lookahead négatif:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /\A(?=.*\bverticalement\b)(?!.*\bscroll\b.*\bverticalement\b).*\K\bverticalement\b/s
    Mais je déconseille cette dernière pattern qui, bien que plus courte, sera sujette à un catastrophic backtracking avec une chaîne un peu longue.

  3. #3
    DMC
    DMC est déconnecté
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2002
    Messages : 25
    Points : 39
    Points
    39
    Par défaut
    Bonjour CosmoKnacki,

    Merci pour la regex, je vais tester.

  4. #4
    DMC
    DMC est déconnecté
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2002
    Messages : 25
    Points : 39
    Points
    39
    Par défaut
    Bonjour CosmoKnacki,
    Cela semble fonctionner
    Merci beaucoup.

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

Discussions similaires

  1. [XL-2007] Depuis excel trouver un mot dans un document Word et supprimer la ligne ou est le mot
    Par scoubi77 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/10/2015, 18h55
  2. Réponses: 6
    Dernier message: 30/03/2015, 10h45
  3. [Regex] Trouver les mots entre certains autres mots
    Par lequebecois79 dans le forum Langage
    Réponses: 0
    Dernier message: 13/02/2012, 20h57
  4. [MySQL] Vérifier qu'un email n'existe pas avant de créer un nouveau compte
    Par Invité dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/04/2008, 17h43
  5. Réponses: 6
    Dernier message: 09/01/2008, 11h56

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