Forum Programmation.autre regexp exclure un ensemble de caractère

Posté par  .
Étiquettes : aucune
0
17
oct.
2005
Bonjour,
Je suis en train de devenir fou mais je ne trouve pas la possibilité d'exclure un ensemble de caractères en regexp pure.
[^deb] : exclue les caractères d, e, b.
Mais n'y a t'il pas un moyen d'exclure que les caractères "d" suivi de "e" suivi de "b", enfin bref d'exclure la chaîne deb ?
(à part [^d][^e][^b])
Merci d'avance pour vos réponses
  • # meuh

    Posté par  (site web personnel) . Évalué à 3.

    vu dans perlre(1)

        "(?!pattern)"
            A zero-width negative look-ahead assertion. For example "/foo(?!bar)/" matches any occurrence of "foo" that isn't followed by "bar".


    la plupart des moteur de regexp pas trop débiles disposent de cette extension.
  • # Commentaire supprimé

    Posté par  . Évalué à 3.

    Ce commentaire a été supprimé par l’équipe de modération.

  • # quelle regex ?

    Posté par  . Évalué à 4.

    regarde du coté de (?!foo) ou (?<!foo)

    cf la doc de perl (motif etendu) : http://www.mongueurs.net/perlfr/perlre.html

    Dam
  • # merci pour le test avant négatif

    Posté par  . Évalué à 1.

    merci beaucoup pour vos réponse c'était pour la commande grep. Mais cela ne marchait pas en shell
    ==
    %s ls |grep -E ".*(?!deb).*"
    zsh: event not found: deb).
    idem pour grep -P (mode perl)
    ==
    Je pense que c'est tout de suite interprété par le shell, mais d'ailleurs les grep modernes ne supporte pas les (? de toute façon (excepté l'option perl)
    • [^] # Re: merci pour le test avant négatif

      Posté par  . Évalué à 3.

      grep permet d'inverser la condition de test avec l'option -v:
      ls | grep -v deb
      devrait répondre à ton problème.

      PS: Si tu ne veux pas que le shell n'interprète pas les métacaractères, il faut utiliser la quote simple et non le guillemet (ls |grep -E '.*(?!deb).*')
      • [^] # Re: merci pour le test avant négatif

        Posté par  . Évalué à 2.

        Désolé de me répondre à moi-même mais j'ai un peu foiré le PS.
        Il fallait lire:
        PS: Si tu ne veux pas que le shell interprète les métacaractères, il faut utiliser la quote simple et non le guillemet (ls |grep -E '.*(?!deb).*')

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.