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 :

Casse tête exclusion caractère [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 52
    Par défaut Casse tête exclusion caractère
    Bonjour à tous,

    Je suis face à un problème que je peine à résoudre.


    J'utilise une application pour faire des rechercher/remplacer.
    Je recherche environ 300 expression, que je remplace par cette même expression balisée.
    Exemple :
    Cherche "XYZ 1 mars 2020" Remplace par <balise type="XYZ" jour="1" mois="mars" annee="2020">XYZ 1 mars 2020</balise>

    Le truc, c'est que je peux passer des documents assez important dedans, qui sont déjà balisés. Si j'exécuter mon script à nouveau, je vais baliser à nouveau mon expression :
    <balise type="XYZ" jour="1" mois="mars" annee="2020"><balise type="XYZ" jour="1" mois="mars" annee="2020">XYZ 1 mars 2020</balise></balise>

    J'ai trouvé une pseudo parade en commençant chaque expression à trouver par [^>]. Cela fonctionne, je ne balise plus deux fois la même expression. En revanche, comme j'exclus le ">", l'expression comprend qu'il faut quand même prendre n'importe quel caractère qui précède mon expression, sauf le ">".
    Je reconnait donc ".XYZ 1 mars 2020" ou ":XYZ 1 mars 2020" etc. (je mets une ponctuation mais bien souvent ça choppe des espaces.

    Savez vous comment je peux trouver une parade pour évider de boucler dans ma recherche ? Ci ce n'est pas assez claire je vous fournirai plus d'informations.

    Merci d'avance pour votre aide !
    Romain

  2. #2
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 52
    Par défaut
    En fait, il faudrait que je trouve une sorte de (?!<) -l'expression ne fini par par < mais inversée ! l'expression ne débute pas par >.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par Ambuletz Voir le message
    ...Ci ce n'est pas assez claire je vous fournirai plus d'informations...
    Ça dépend... Tu veux des réponses ou pas ?

  4. #4
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 52
    Par défaut
    Oui j'aimerai bien

    Je simplifie alors !
    J'aimerai pouvoir valider "expression" tout en invalidant ">expression".
    Mon problème avec ma requête [^>]expression est que ça invalide bien ">expression" mais dans le cas ou ça fonctionne, ça récupère le caractère qui précède "expression" à savoir " expression" (je m'enfonce ?)

    J'ai essayé avec ^(?!>)expression, mais là ça ne fonctionne que si mon expression se trouve tout au début, et non en plein texte.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Le minimum est de :

    • montrer ton code (tes essais de regex) : on ne va pas le deviner... Ni partir de zéro.
    • définir clairement etexhaustivement la structure à chercher ("XYZ" ?? ...)
    • fournir un exemple de texte à traiter (pour faire des tests)

    Non ?

  6. #6
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 52
    Par défaut
    Excusez-moi, je voulais simplifier au maximum mais ce n'était pas très malin.

    Je prends comme exemple la regex suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Cass\.\s+com\.(?:,\s+(?:avis|QPC))?,\s+(\d{1,2})e?r?(?:\s|&nbsp;)+(\w+\.?)\s+(\d{4}),\s+n(?:°|&deg;|o)s?(?:\s|&nbsp;)+(\d{2}-\d{2})\.?(\d{3}))
    je la recherche et je la remplace par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <renvoi type="CASS" refid="$5$6" jour="$2" mois="$3" annee="$4">$1</renvoi>
    Ce qui pour l'expression suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cass. com., 5 janvier 2012, n° 12-45.644
    Me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <renvoi type="CASS" refid="12-45644" jour="5" mois="janvier" annee="2012">Cass. com., 5 janvier 2012, n° 12-45.644</renvoi>
    Voilà pour les données. (voici un lien pour la retrouver rapidement sur RegEx101 : https://regex101.com/r/kZmwUI/1 )

    Mon problème : Lorsque je fais mon rechercher/remplacer, ma requête va retrouver mon expression, même si elle a déjà été transformée, ce qui va imbriquer les baises <renvoi>.
    J'aimerai donc modifier mon expression de manière à exclure le caractère ">" au début, mais en faisant [^>] je l'exclu bien mais je prends n'importe quel caractère qui n'est pas un ">" à la place. Ce n'est peut-être pas la meilleurs façon d'arriver à mes fins ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Ajoute au tout début de ta regex :
    • (?: .... ) : parenthèse non-capturante
    • ^|[^>] : début de ligne ou tout sauf >

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/03/2009, 17h05
  2. [Tableaux] Casse têtes de boucles
    Par Anduriel dans le forum Langage
    Réponses: 5
    Dernier message: 28/06/2006, 00h24
  3. requête SQL un peu casse tête
    Par hellbilly dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/12/2005, 10h03
  4. Classe, pile, pointeurs et casse-tête!
    Par zazaraignée dans le forum Langage
    Réponses: 6
    Dernier message: 26/09/2005, 16h57
  5. casse-tête excel
    Par gregius dans le forum Access
    Réponses: 2
    Dernier message: 21/09/2005, 16h38

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