Dans une regexp PCRE, est-il possible de mettre une quote simple entre simples quotes ?

Le
Jean Francois Ortolo
Bonjour

Je n'ai pas encore essayé en langage PHP, les regxep suivantes, qui
donnent une erreur :

cat tmp100.txt | egrep -e '''

Erreur quel que soit le nombre de dans la regexp.

Par contre tout ceci fonctionne :

cat tmp100.txt | egrep -e "'"
cat tmp100.txt | egrep -e "'"
cat tmp100.txt | egrep -e """
cat tmp100.txt | egrep -e "\""
cat tmp100.txt | egrep -e "\""
cat tmp100.txt | egrep -e "\'"


Je ne sais pas si ce problème des simples quotes, concerne aussi les
regexp PCRE de PHP.

Merci beaucoup de me dire si c'est réellement possible de mettre des
simples quotes ( et comment ) entre des simples quotes, dans une regexp
PCRE en PHP. ( Que ce soit dans ou hors d'une classe ).

Le PHP Manual a changé récemment, est beaucoup moins clair et détaillé.

Merci beaucoup de vos réponses.

Jean François Ortolo
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #26019512
Bonjour,

Le 05/03/2014 11:59, Jean Francois Ortolo a écrit :

Bonjour

Je n'ai pas encore essayé en langage PHP, les regxep suivantes, qui
donnent une erreur :

cat tmp100.txt | egrep -e '''



Tu as donc testé l'interprétation du shell plutôt que celle de PHP ou
de PCRE.

Dans bash, « echo ''' » donne le même comportement que ta commande :
il attend la suite.

Erreur quel que soit le nombre de dans la regexp.

Par contre tout ceci fonctionne :

cat tmp100.txt | egrep -e "'"



echo "'" -> '

cat tmp100.txt | egrep -e "'"



echo "'" -> '

cat tmp100.txt | egrep -e """



echo """ -> "

cat tmp100.txt | egrep -e "\""



Tu es sûr de toi ?

cat tmp100.txt | egrep -e "\""



echo "\"" -> "

cat tmp100.txt | egrep -e "\'"



echo "\'" -> '

Tu peux aussi essayer :
cat tmp100.txt | egrep -e '

sachant que :
echo ' -> '

Je ne sais pas si ce problème des simples quotes, concerne aussi les
regexp PCRE de PHP.



Encore une fois, tu n'as en rien testé PCRE, juste le shell.

Merci beaucoup de me dire si c'est réellement possible de mettre des
simples quotes ( et comment ) entre des simples quotes, dans une regexp
PCRE en PHP. ( Que ce soit dans ou hors d'une classe ).



Dans une regexp PCRE, tout simplement : /'/

Le fait que tu dises « entre des simples quotes » signifie probablement
que tu te préoccupes de la syntaxe des chaînes de caractères en PHP :

Par exemple : '/'/' (le est requis non pas par PCRE mais par la
syntaxe des chaînes en PHP).


Cordialement,
--
Olivier Miakinen
Olivier Miakinen
Le #26019782
Le 05/03/2014 14:40, je répondais à Jean-François Ortolo :

cat tmp100.txt | egrep -e '''



Tu as donc testé l'interprétation du shell plutôt que celle de PHP ou
de PCRE.

Dans bash, « echo ''' » donne le même comportement que ta commande :
il attend la suite.



Encadrer des caractères entre des apostrophes simples préserve la valeur
littérale de chacun des caractères. Une apostrophe ne peut pas être
placée entre deux apostrophes, même si elle est précédée d'une barre
oblique inverse.
</>

Cordialement,
--
Olivier Miakinen
Jean Francois Ortolo
Le #26019962
Le 05/03/2014 16:13, Olivier Miakinen a écrit :
Le 05/03/2014 14:40, je répondais à Jean-François Ortolo :

cat tmp100.txt | egrep -e '''



Tu as donc testé l'interprétation du shell plutôt que celle de PHP ou
de PCRE.

Dans bash, « echo ''' » donne le même comportement que ta commande :
il attend la suite.



Encadrer des caractères entre des apostrophes simples préserve la valeur
littérale de chacun des caractères. Une apostrophe ne peut pas être
placée entre deux apostrophes, même si elle est précédée d'une barre
oblique inverse.
</>

Cordialement,





Bonjour Monsieur

Super merci pour votre réponse.

Vous êtes une référence dans ce newsgroup, en matière de
programmation PHP. ;)

Je suis en train actuellement, de migrer le site www.lescourses.com ,
pour qu'il soit transféré vers un nouveau serveur plus récent ( OVH
dédié aussi ).

Actuellement, j'ai adapté toutes les regexp de POSIX vers PCRE, et
les instructions MySQL de type : mysql_*() , vers leur équivalent de la
classe PDO.

Pour faire la translation des instructions, j'ai utilisé deux scripts
Awk de ma fabrication ;) , plus quelques scripts récursifs en Bourne Shell.

Ensuite, je dois corriger chacune des regexp en erreur.

Pour celà, j'ai fait un script php lisant le script en paramètre, et
évaluant la valeur réelle des regexp rencontrées, ( même contenant des
variables ), en évaluant aussi les variables affectées rencontrées.

Ce script php a été lancé dans toute l'arborescence à vérifier.

J'ai obtenu un fichier texte d'environ 8392 lignes ( autant de
regexp ), avec dans chaque ligne :

regexp_interprétée "est dans" pathname_du_script "Ligne = "
numéro_de_ligne "Constante|Variables" noms_des _variables_dans _la
_regexp , instruction_regexp_de_départ.


Il y a quelques jours, j'ai nettoyé ce fichier ( une copie ) de
toutes ses regexp valides, et il reste environ 350 regexp ( 350 lignes )
théoriquement douteuses ou non valides, et j'ai commencé aussi il
quelques jours, à arranger les regexp dans les scripts ( php ).

J"ai regardé dans différents sites sur les regexp PCRE et PHP, et
votre information est pratiquement la dernière info dont j'avais besoin
pour terminer le boulot. ;)

Après avoir corrigé théoriquement toutes les regexp, je devrai tester
le site sur mon ordinateur( sous le répertoire /php6/ ), puis sur le
site en réel ( idem ), puis sur mon ordinateur ( à la racine ), puis sur
le site/ancien serveur en réel ( à la racine aussi ), tout en demandant
au Directeur de mon site partenaire de vérifier aussi

Pour l'instant je suis à la fin de la phase 1 ( vérification des
regexp ), et il y a donc 5 phases.

Votre réponse me permet de faire ces manipulations, avec suffisamment
de certitude que les regexp seront valides quelles que que soient les
modalités d'exécution des scripts du site.

Je suis sur ce boulot depuis quelques semaines. ;)

Merci beaucoup.

Jean François Ortolo
Olivier Miakinen
Le #26020522
Le 05/03/2014 17:22, Jean Francois Ortolo a écrit :

Vous êtes une référence dans ce newsgroup, en matière de
programmation PHP. ;)



... surtout quand il ne s'agit pas de PHP mais de shell. :-D

Je suis en train actuellement, de migrer [...]



Tous mes v½ux de réussite t'accompagnent. D'ailleurs j'ai plutôt
confiance que cela se passera bien, vu le soin que tu prends à
chaque étape.

Cordialement,
--
Olivier Miakinen
Jean Francois Ortolo
Le #26021352
Le 05/03/2014 20:26, Olivier Miakinen a écrit :

Tous mes v½ux de réussite t'accompagnent. D'ailleurs j'ai plutôt
confiance que cela se passera bien, vu le soin que tu prends à
chaque étape.

Cordialement,





Bonjour Monsieur

J'ai encore deux questions à poser :

Est-il vrai que l'un ou l'autre de ces caractères,soient des
méta-caractères, et aient des statuts spéciaux dans les regexp PCRE ?

- Le deux -points ":"

- Le dièze : "#".

Je sais bien que le dièze "#" peut servir de délimiteurs, et que dans
ce cas ( et dans ce cas seulement théoriquement ), il faut l'échapper
dans la regexp.

Mais j'ai lu dans un site, que nécessairement, une regexp comportant
un dièze,s'arrêtait à ce dièze, sous-entendu même si ce n'est pas le
délimiteur ?

Quant au deux-points, je ne vois pas quoi il peut bien servir, si
c'est un caractère spécial en PCRE ?

J'ai terminé le nettoyage de mes scripts php, j'ai fait hier soir un
script awk, pour détecter les crochets ( [ ou ] ) foireux ( de classe ou
non, échappés ou non, etc...

Par exemple, je détecte la suite : [ [ ] , ou : [ ] ] , etc...

Merci beaucoup de votre réponse.

Très respectueusement.

Jean François Ortolo
Olivier Miakinen
Le #26021422
Bonjour,

Le 06/03/2014 08:48, Jean Francois Ortolo a écrit :

J'ai encore deux questions à poser :

Est-il vrai que l'un ou l'autre de ces caractères,soient des
méta-caractères, et aient des statuts spéciaux dans les regexp PCRE ?

- Le deux -points ":"

- Le dièze : "#".



Non, c'est faux. Ni l'un ni l'autre ne sont des méta-caractères, et ce
aussi bien dans ou hors des classes de caractères (entre crochets) :

Je sais bien que le dièze "#" peut servir de délimiteurs, et que dans
ce cas ( et dans ce cas seulement théoriquement ), il faut l'échapper
dans la regexp.



Oui. Idem pour le deux-points.

Mais j'ai lu dans un site, que nécessairement, une regexp comportant
un dièze,s'arrêtait à ce dièze, sous-entendu même si ce n'est pas le
délimiteur ?



Sans doute le site traitait-il des commandes telles que grep, appelées
à partir d'un shell unix : s'il n'est pas protégé par des guillemets,
un dièse en ligne de commande démarre un commentaire et arrête donc
l'interprétation des arguments.

Ou alors l'auteur s'est trompé, cela arrive même sur des sites web. ;-)

Quant au deux-points, je ne vois pas quoi il peut bien servir, si
c'est un caractère spécial en PCRE ?



Ce n'en est pas un. Pas plus que le dièse.


Cordialement,
--
Olivier Miakinen
Jean Francois Ortolo
Le #26021642
Le 06/03/2014 09:03, Olivier Miakinen a écrit :
Bonjour,

Le 06/03/2014 08:48, Jean Francois Ortolo a écrit :

J'ai encore deux questions à poser :

Est-il vrai que l'un ou l'autre de ces caractères,soient des
méta-caractères, et aient des statuts spéciaux dans les regexp PCRE ?

- Le deux -points ":"

- Le dièze : "#".



Non, c'est faux. Ni l'un ni l'autre ne sont des méta-caractères, et ce
aussi bien dans ou hors des classes de caractères (entre crochets) :

Je sais bien que le dièze "#" peut servir de délimiteurs, et que dans
ce cas ( et dans ce cas seulement théoriquement ), il faut l'échapper
dans la regexp.



Oui. Idem pour le deux-points.

Mais j'ai lu dans un site, que nécessairement, une regexp comportant
un dièze,s'arrêtait à ce dièze, sous-entendu même si ce n'est pas le
délimiteur ?



Sans doute le site traitait-il des commandes telles que grep, appelées
à partir d'un shell unix : s'il n'est pas protégé par des guillemets,
un dièse en ligne de commande démarre un commentaire et arrête donc
l'interprétation des arguments.

Ou alors l'auteur s'est trompé, cela arrive même sur des sites web. ;-)

Quant au deux-points, je ne vois pas quoi il peut bien servir, si
c'est un caractère spécial en PCRE ?



Ce n'en est pas un. Pas plus que le dièse.


Cordialement,




Bonjour Monsieur

Super réponse. ;)

Je n'ai plus qu'à détecter les crochets échappés, avec un script awk.

Je crois que le caractère échappement est : "\", donc reconnaître
les tokens : "\[" et "\]" devrait suffire.

C'est la toute dernière chose que je dois faire pour arranger ces
scripts php.

Super merci Monsieur pour vos réponses. ;)

Merci beaucoup.

Respectueusement.

Jean François Ortolo
Publicité
Poster une réponse
Anonyme