Expression réguliere à l'envers

codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 - 6 déc. 2007 à 00:36
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 - 12 janv. 2008 à 00:39
Bonsoir à tous :)
Voila, pour mes besoins, j'aurai besoin d'analyser une chaine de caractères avec des expressions régulières.
Le probleme, c'est qu'au lieu de partir de la gauche pour aller vers la droite, je doit faire l'inverse. Commencer à droite, puis revenir à gauche.
Existe-il un parametre, un indicateur pour la fonction preg_match, ou les expregs en générals, afin de commencer l'analyse de la chaine à droite et pas a gauche ?

Merci de votre aide :)

18 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
6 déc. 2007 à 01:11
Salut,

Je suis curieux de savoir quel cas justifie qu'on analyse de droite à gauche...

Sinon, tu peux toujours inverser la chaine avec strrev() et construire tes masques à l'envers.
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
6 déc. 2007 à 01:42
j'avais pensé à cette méthode, mais elle est quand meme un peu plus lourde, c'est pour cela que j'esperais une fonctionalité déjà implémenté :p

Le but, c'est pour le connecteur à la base de donnée (j'optimise ma classe), et je passe par un motor://login:password@hosfft:port/dbase
et en postgresql, on peux juste demander la base de donnée (pgsql://dbase), or, de gauche à droite, si je parse sela, j'aurai motor=pgsql, login=dbase :/ que si je parse de droite à gauche : nikel ! :)

That's why !

Jme suis amusé à m'installer une machine virtuelle, avec mysql, postgresql, oracle, sql server (dont j'ai les licences grace à l'école), et j'ai fait du mapping de port sur ma machine, comme ca je peux tester les différentes classes et rendre un truc un peu plus complet ! :)

Content de voir qu'il y a des gens qui veillent, chuis pas tout seul ;)
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
6 déc. 2007 à 02:44
Avec des assertions, tu dois pouvoir y arriver. Je cherche un peu, et je te dis.
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
6 déc. 2007 à 02:58
assertions ? connais pas ... jvais aussi chercher !
Je devrais mettre ma classe d'abstration sgbd en ligne, tu pourra me dire ce que tu en pense stp ?
Ca m'aiderait beaucoup ! :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
6 déc. 2007 à 03:07
Argl j'ai un trou de mémoire, comment tu appel les différents : pgsql, mssql, mysql, etc. Je bloque sur "moteurs", mais ca a un autre terme .... argl c'est quoi ... argll !! :p
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
6 déc. 2007 à 03:14
Euh... ben moteur, moi ça me parle. Ca me choque pas...
Je sais pas, tu cherche layer ? Layer c'est une couche (=épaisseur)... Non, moteur de base de données, c'est du vocabulaire tout à fait adapté, il me semble.
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
6 déc. 2007 à 03:14
Bon à défaut, ce sera dbms : Database Management System
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
6 déc. 2007 à 03:17
SGBDR
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
6 déc. 2007 à 03:35
Cadeau :

preg_match('`([a-z]+)://((?<=://)[a-z]+)?(?::)?((?<=:)[a-z]+)?(?:@)?((?<=@)[a-z]+)?(?::)?((?<=:)[a-z]+)?(?:/)?((?<=/)[a-z]+)$`', $chaine_connexion, $params );

Pour la chaine :

motor://login:pass@host:port/base

l'expression régulière retourne le tableau suivant :
* [0]=>motor://login:pass@host:port/base
* [1]=>motor
* [2]=>login
* [3]=>pass
* [4]=>host
* [5]=>port
* [6]=>base

Pour la chaine :

motor://base

elle retourne :

* [0]=>motor://base
* [1]=>motor
* [2]=>
* [3]=>
* [4]=>
* [5]=>
* [6]=>base

Quoi qu'il en soit, l'élément 1 est toujours le moteur utilisé, et le 6 est TOUJOURS la base de données.

A toi, ensuite de t'assurer que si le login est passé, il y a aussi le mot de passe et le serveur.

Je te laisse le choix :
- comprendre tout seul comment fonctionnent les assertions utilisées dans l'expression régulière ci-dessus avec ce tuto :
http://www.lumadis.be/regex/tuto_pcre.php#look
- une explication tout de suite maintenant
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
6 déc. 2007 à 03:44
ouah t'es motivé toi ;)
Tout de suite ? !!

Nan je vais regarder ca tranquillement, j'ai pas mal de boulots avant d'aller me coucher là :p
Par contre merci pour la regexp!
Nikel, c'est ce qu'il me fallait !

Merci beaucoup à toi ! :)

Tiens j'ai fait une mise à jours de ma classe sgbd, si tu n'a pas eu de mails, c'est par ici :
http://www.phpcs.com/codes/COUCHE-ABSTRACTION-SGBD-AVEC-RESULTATS-ORIENTE-OBJET_44038.aspx

Si tu sais pas quoi faire .... ;)
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
6 déc. 2007 à 04:04
Sisi, je sais quoi faire... ;)
Cette regexp en soi n'est, finalement, pas bien compliquée. Faut juste avoir intégré le principe des assertions arrières. C'est quand même le pied les assertions.
J'ai pas fait de bench pour savoir si elle est efficace ou pas, mais vu que la chaine est analysée à partir de segments bien définis, elle devrait pas trop ramer. Mais comme je sais pas à quoi on peut la comparer...

Je jetterai un oeil à ta source un peu plus tard. Pour l'heure, dodo, même si je voulais pas dormir... je tiens plus.

C'était RadioMavie, à demain pour une nouvelle émission...
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
6 déc. 2007 à 04:08
Good night sir ! (:
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
7 déc. 2007 à 01:42
Alors là il y a un truc qui me dépasse !
J'ai un probleme et je ne comprends pas pourquoi.
Ton pattern, en dehors d'une classe, il marche nikel parfait excellent ! :p
Mais des que je le met dans ma classe (http://www.phpcs.com/codes/COUCHE-ABSTRACTION-SGBD-AVEC-RESULTATS-ORIENTE-OBJET_44038.aspx)
Impossible, ca marche pas !
Je comprends pas pourquoi !!!!
Pourtant je ne fait qu'un copier coller du pattern ! c'est tout !!!!!!

Une idée ?
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
7 déc. 2007 à 06:15
Euh... non, c'est pas normal lol

Est-ce que preg_match renvoit false ?
Je suppose que le tableau des correspondances n'est pas rempli, mais est-ce que preg_match fonctionne bien, au moins... ?

Sinon, ben... euh... c'est pas normal, tout ce que je peux te dire, c'est de bien vérifier ton code...
Tu peux montrer les lignes telles que tu les as mises pour voir comment c'est exactement ? (bon et pis je dormirai demain, moi)
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
7 déc. 2007 à 14:04
En fait c'est juste cette classe :
http://files.codes-sources.com/fichier.aspx?id=44038&f=db%2fdbConnector.class.php

Ou tu remplace $sPattern par le tiens ! :p
C'est la seule chose que j'ai faite !

Je comprends vraiment pas :/
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
7 déc. 2007 à 14:10
LoL

T'as laissé strrev...
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
7 déc. 2007 à 16:42
ooooooo la honte !! ooooooooo !!! :p

Merci bien !! :)
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
12 janv. 2008 à 00:39
Bon, je détere ce topic, car en fait, ca existait déjà ! :p

Ce que l'on voulait, c'était récuperer les différents composants d'un driver://root@localhost/dbname ?
Une fonction de php le permet déjà : parse_url, elle retourne les éléments s'ils existent, reste plus que merger cela avec un tableau vide contenant tous les éléments afin d'éviter des erreurs de isset et hop ! c'est tout bon ! :)

Enfin voila, juste pour dire que ca existait :)
0
Rejoignez-nous