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 :

[PCRE] Trouver les lignes ne contenant pas un mot


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13
    Par défaut [PCRE] Trouver les lignes ne contenant pas un mot
    Je voudrais trouver les lignes qui contiennent un mot, mais pas l'autre.

    Exemple : je veux trouver les lignes contenant "age:\d+" mais pas "deleted".

    [deleted]name:John;age:44;city:metropolis
    ne doit pas être acceptée, alors que
    [new]name:John;age:44;city:metropolis
    doit l'être.

    Avec les negative look behind ça ne fonctionne pas, puisque mon mot interdit ne précède pas forcément immédiatement le mot recherché.

    J'ai naïvement tenté ça mais ça ne marche pas (tout est accepté) :
    (?<!deleted).+age:\d+

    Une idée ? Merci

  2. #2
    Membre émérite Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Par défaut
    essaies avec strpos...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13
    Par défaut
    Bonjour,

    Merci vorace pour la réponse mais il ne s'agit pas de langage de programmation, il s'agit purement de regex pour le coup. En l'occurrence, je m'en sers dans un éditeur de fichier.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    notepad++ ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13
    Par défaut
    Euh par exemple Mais pour les recherches complexes dans de gros répertoires, j'ai pris l'habitude d'utiliser plutôt PowerGREP, voire Funduc Search and Replace.

    Ceci-dit, la v6 de NP++ m'a réconcilié avec sa fonction de recherche regex.

  6. #6
    Membre confirmé Avatar de Halex78
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 75
    Par défaut
    Hello,
    avec des automates produits ca doit être possible de construire une telle regex, mais les gens ont peuuuur des automates apparemment.
    Si tu construis l'automate qui reconnait le langage des mots qui contiennent age, et un autre automate qui reconnait le langage des mots qui contiennent delete, alors tu construis l'automate qui reconnait le complémentaire du second langage (les mots qui ne contiennent pas delete), tu fais le produit de ces deux automates, qui reconnait l'intersection des deux langages.
    Une fois cette tache herculéenne accomplie (aucune ironie) tu en déduis la regex à partir de l'automate.
    Donc voilà, si tu la veux vraiment ta regex, il va falloir y aller avec motivation
    Sinon tu pourras toujours utiliser l'option eval, pour appliquer une fonction qui renvoit la ligne si elle contient age, et pas delete, et vide sinon... Mais du coup, ce n'est pas la regex miracle.

    Euh, j'ai bien compris que tu cherchais une "fonction regex" du type not(motif) qui permettrait de matcher des expressions dans lesquelles "motif" n'apparaitrait pas. Ayant moi même cherché cette fonction miraculeuse, j'ai opté pour des solutions alternatives puisqu'elle n'existe apparemment pas...

Discussions similaires

  1. [RegEx] Trouver les lignes ne contenant pas une expression
    Par venturi dans le forum Langage
    Réponses: 6
    Dernier message: 14/08/2013, 17h52
  2. Réponses: 2
    Dernier message: 27/04/2012, 17h44
  3. Réponses: 2
    Dernier message: 20/05/2011, 13h46
  4. [RegEx] Rechercher les chaines ne contenant pas un mot donné
    Par saramery dans le forum Langage
    Réponses: 23
    Dernier message: 27/11/2008, 12h50
  5. Comment comparer 2 tables et trouver les lignes différentes
    Par PierreYvesQc dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 07/08/2007, 21h04

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