REGEX ET MYSQL

  • Auteur de la discussion Auteur de la discussion KOogar
  • Date de début Date de début
WRInaute accro
Bonjour,

Petit souci
dans un annuaire le but est de supprimer les URL du genre:
http://www.site.com/pag1/
http://www.site.com/index.html
et ne garder que les url brut
http://www.site.com

DELETE * FROM tb WHERE url REGEXP 'http://www.([[:alnum:]])+([-]?[[:alnum:]])\.([a-z]{2,4})$/([^/]*)'

marche pas

ici c'est bon (ci dessous c'est la partie qui reconait une url classique
http://www.([[:alnum:]])+([-]?[[:alnum:]])\.([a-z]{2,4})$
la fin deconne:
/([^/]*)

pls help
 
WRInaute accro
Je suis nulle en regexp mais tu ne peux pas faire l'inverse si jamais tu ne trouves pas la soluce ?
Par exemple, tu récupères toutes les urls qui sont ok, ça tu sais faire :
ici c'est bon (ci dessous c'est la partie qui reconait une url classique
-http://www.([[:alnum:]])+([-]?[[:alnum:]])\.([a-z]{2,4})$
puis tu supprimes les autres qui ne conviennent pas en récupérant leurs ids ?... risqué peut-être ?

ps : pense à utiliser -example.com, -example.org et -example.net ou à mettre des traits d'union devant les urls exemples
 
WRInaute accro
..

Pas vraiment ce que je veux. Mais je pense avoir bientot trouver ;- ) Mais tout autre suggestions me serait toujours utile.

..
 
WRInaute occasionnel
Salut,

Je profite de ce thread pour poster mon petit problème :

J'ai une table qui contient des dimensions (en mm) sous la forme :

6.25x3.50x2.50
10.25x6.58x4.57
8.50x6.69x5.58
etc...

J'ai un formulaire de recherche sur mon site qui permet de rechercher en fonction des dimensions, ce formulaire comporte 3 input text : un nommé "longueur" un autre "largeur" et un autre "hauteur" et qui correspond aux 3 dimensions contenus dans ma table : 6.25 = longueur ; 3.50 = largeur et 2.50 = hauteur (correspondant à ma première ligne de mon exemple ci-dessus)

Je recherche une requête (avec REGEX ou pas) qui me permettrait de sélectionner les entrées dans ma base de données correspondant à une longueur, une largeur et/ou une hauteur et qui seraient entré par l'internaute. J'ai pas mal cherché mais j'ai rien trouvé, pouvez me conseiller une requête ?

Autrement dit, si l'internaute entre 6.25 dans le champ longueur de mon formulaire la requête devra pouvoir trouver le 6.25 qui est contenu dans 6.25x3.50x2.50 de ma table !

Merci pour vos réponses et conseils.
 
WRInaute accro
je ne suis pas sur que la commande REGEXP accepte une variable php dans la chaine de travail, j'ai un peu chercher mais je n'ai rien trouver sur ce sujet.
essayons ;)
Code:
<?php
// ajouter le signe d'echappement pour que le point (.)
// retrouve sa valeur de caractere simple, ex: 6.23 -> 6\.23
$longeur  = str_replace('.','\.',$longeur);
// requetes
$req  ="SELECT * FROM tb WHERE champ REGEXP '".$longeur."x([0-9\.]+)x([0-9\.]+)'";
// ou peut-etre ?
$req  ="SELECT * FROM tb WHERE champ REGEXP '$longeur\x([0-9\.]+)x([0-9\.]+)'";
?>
 
WRInaute occasionnel
Merci beaucoup KOogar ta requête

$req ="SELECT * FROM tb WHERE champ REGEXP '".$longeur."x([0-9\.]+)x([0-9\.]+)'";

marche parfaitement :lol:

Là ou ça ce complique un peu c'est que dans mon formulaire de recherche, l'internaute peut aussi renseigner un 4ième champs qui s'appelle "Tolérance" exprimé lui aussi en millimètres et qui est sous la forme une fois remplis, par exemple "0.20". Ce champ permet de définir une longueur mini et une longueur maxi, même chose pour les 2 autres champs "largeur" et "hauteur" auxquels cette tolérance s'applique aussi si les champs "largeur" et "hauteur" sont renseignés.

Donc imaginons que l'internaute renseigne le champ "longueur" (par exemple : "6.15"), le champ "largeur" (par exemple : "4.22"), le champ "hauteur" (par exemple : "3.41") et le champ "tolérance" (par exemple : "0.20") il faudra donc rechercher dans la table les dimensions suivantes :

Longueur de 5.95 à 6.35 et Largeur de 4.02 à 4.42 et hauteur de 3.21 à 3.61

Comment traduire cela par une requête ?
 
WRInaute accro
tant que la chaine accepte les variables externes, c'est possible, le regex aura un motif de ce genre =>

=> 5.95 à 6.35
?(([5-]+)\.[9-]+[0-5]+)?(([6-]+)\.[0-3]+[0-5]+)

Il faut ensuite decomposer les chaines 5.95 et 6.35, reprendre les valeurs et les placer dans la chaine du motif. C'est pas gagné pour autant car il faudra ameliorer le motif pour qu'il puisse prendre les nombres avec des dizaines et des centaines...
 
WRInaute occasionnel
Merci KOogar pour ta réponse.

J'ai essayé cette requête ci-dessous mais ça marche pas :cry:

Meas REGEXP '?(([5-]+)\.[9-]+[0-5]+)?(([6-]+)\.[0-3]+[0-5]+)x([0-9\.]+)x([0-9\.]+)'

"Meas" est le champ dans ma table qui stock les dimensions.

Pour infos, il pourra y avoir des nombres avec des dizaines mais pas de centaines (ni au delà).

Que faire (c'est pas facile ces regex !) ?
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut