Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/01/2007, 14h06   #1
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 23
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : janvier 2007
Messages : 23
Points : 17
Points : 17
Envoyer un message via MSN à Babssss
Par défaut Protection par anti-slash

hello à tous, le gros de mon problème de ce matin étant résolu, il me reste une question...

Comment tester en PCRE "est un guillemet précéder d'un anti-slash ou n'est pas un guillement" ?

L'expression: " ((?:(?<=\\)")|[^"])* " ne marche pas :(
Babssss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 16h38   #2
Membre expérimenté
 
Inscription : mai 2002
Messages : 673
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 673
Points : 532
Points : 532
Houaa ! c'est de l'art une question comme ça !
Bon, si j'ai bien compris, tu veux détecter un \" dans ta chain ?

Si c'est le cas, utilise : \\\"

Si tu veux détecter un guillement qui n'est PAS précédé d'un antislash, je verais bien un truc comme ça : ?\"
gloubi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 20h58   #3
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 23
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : janvier 2007
Messages : 23
Points : 17
Points : 17
Envoyer un message via MSN à Babssss
Citation:
Envoyé par gloubi
Houaa ! c'est de l'art une question comme ça !
Bon, si j'ai bien compris, tu veux détecter un \" dans ta chain ?

Si c'est le cas, utilise : \\\"

Si tu veux détecter un guillement qui n'est PAS précédé d'un antislash, je verais bien un truc comme ça : ?\"
Pas tout à fait... j'aimerais capturer une chaîne délimitée par des guillemet... j'utilise pour ça: "([^"])*"

mais si j'ai une chaîne:
"voilà une chaîne... elle contient une \"citation\", mais cette citation ne dois pas arreter l'analyse!"

ben on va me sortire voilà une chaîne... elle contient une \
Babssss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 21h04   #4
Membre expérimenté
 
Inscription : mai 2002
Messages : 673
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 673
Points : 532
Points : 532
Problème interressant... 9a peut pas marcher avec un truc de ce style :

\"[.\\\".]*?\"

(si j'ai bonne mémoire, le point remplace n'importe quel caractere, ce dont apres reflexion je ne suis pas sur pour le ?)

Le principe étant de dire qu'on peut trouver autant de \" que l'on veut dans la chaine avant de trouver un " non précédé d'un \
gloubi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 21h06   #5
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 23
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : janvier 2007
Messages : 23
Points : 17
Points : 17
Envoyer un message via MSN à Babssss
Citation:
Envoyé par gloubi
Problème interressant... 9a peut pas marcher avec un truc de ce style :

\"[.\\\".]*?\"

(si j'ai bonne mémoire, le point remplace n'importe quel caractere, ce dont apres reflexion je ne suis pas sur pour le ?)

Le principe étant de dire qu'on peut trouver autant de \" que l'on veut dans la chaine avant de trouver un " non précédé d'un \
Ya quand même un bug, si la chaîne est: "\"citation\"", ben ça ne marchera pas
Babssss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 21h08   #6
Membre expérimenté
 
Inscription : mai 2002
Messages : 673
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 673
Points : 532
Points : 532
c'est juste ! Si j'avais le droit de faire le porc à ta place, je ferais dabord un str_replace() de \" par §, puis la meme chose dans l'autre sens apres mon traitement lol
gloubi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 22h54   #7
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 23
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : janvier 2007
Messages : 23
Points : 17
Points : 17
Envoyer un message via MSN à Babssss
Citation:
Envoyé par gloubi
c'est juste ! Si j'avais le droit de faire le porc à ta place, je ferais dabord un str_replace() de \" par §, puis la meme chose dans l'autre sens apres mon traitement lol
Et si la chaine contient un § ??

J'aimerais pas pouvoir garder tout les caractères
Babssss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 23h35   #8
Membre expérimenté
 
Inscription : mai 2002
Messages : 673
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 673
Points : 532
Points : 532
Le § était juste là pour illustrer "l'esprit gros cochon"

Rien ne t'empèche de trouver une combinaison plus compliqué qui sera jamais utilisé, genre -=§¤=- ou un truc vraiment crados comme ça !

Y'a la méthode BBCode aussi, où les gars génèrent un UID : en réalité, a chaque texte est associé un UID généré aléatoirement via substr(md5(microtime()),0,10), et ils stockent ça en BDD comme ça :

[B:69762359de]texte en gras[/b:69762359de]

Appliqué à ton principe (en sauvegardant l'UID dans une variable le temps de faire ton traitement), ça réduirait à peu près à néant les chances d'erreur :

§69762359de§ pour un \" avec un str_replace()...

Enfin bon, c'est la méthode dite "du gros porc" (dont j'ai déjà assez abusé aujourd'hui)... Perso, je voit pas de soluce a ton probleme en preg...

En dehors des PREG, y'a les grammaires, les automates et les trucs comme ça...
gloubi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2007, 11h24   #9
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 23
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : janvier 2007
Messages : 23
Points : 17
Points : 17
Envoyer un message via MSN à Babssss
Personne ne sais utiliser les assertions ?

J'ai pourtant l'impression que c'est ce qu'îl me faut
Babssss est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h35.


 
 
 
 
Partenaires

Hébergement Web