"2007/06/03/ta_mere_en_short" et preg_match

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : "2007/06/03/ta_mere_en_short" et preg_match

par Ripat » 03 déc. 2007, 08:34

Heu, ceci dit, je n'ai pas très bien compris pourquoi ton expression retournait des lignes d'array vides.

Ton motif était "logiquement" correct. Faudrait que je pose la question à mon pote Jeffrey Friedl mais il est fort occupé ces derniers temps! :wink:

par Gofromiel » 03 déc. 2007, 08:27

Ma voui !!!! C'est merveilleux !

Merci Ripat, Ô dieu de l'expression régulière !! :-D

par Ripat » 03 déc. 2007, 08:24

Ceci devrait faire l'affaire:
$pat = '#(\d{4})/?(\d{2})?/?(\d{2})?/?([\w]+)?#';

par Gofromiel » 03 déc. 2007, 08:20

Hmm, comme je l'ai dis plus haut, je suis obligé d'utiliser preg_match(). Je m'en sers pour reconnaitre des adresses de documents avec des options, c'est un peu plus compliqué qu'un explode()...

par h0_noMan » 03 déc. 2007, 08:12

Pourquoi es tu obliger d'utiliser un preg_match() ?

Un explode("/",$maChaine); te retourne un tableau.

"2007/06/03/ta_mere_en_short" et preg_match

par Gofromiel » 03 déc. 2007, 06:07

Ralala, je ne comprends franchement rien aux expressions régulière, dès qu'il s'agit de recherche un peu compliqué je suis complètement perdu :-(

J'aimerai récupérer les membres de l'expression "2007/06/03/ta_mere_en_short" où chaque membre peut être optionnel. J'ai *absolument* besoin d'utiliser preg_match() parce que j'utilise des expressions régulières pour reconnaitre les adresses et servir les bons documents, en récupérant les arguments au passage... Bref, voici mon piètre bout de code :
$strings = array
(
	'2007',
	'2007/06',
	'2007/06/03',
	'2007/06/03/ta_mere_en_short'
);

$pat = '#(\d{4})/(\d{2})/(\d{2})/([\w]+)|(\d{4})/(\d{2})/(\d{2})|(\d{4})/(\d{2})|(\d{4})#';

foreach ($strings as $str)
{
	$rc = preg_match($pat, $str, $m);
	
	echo "<pre>result: $rc, " . print_r($m, true) . '</pre>';
}
Avec tout ce bordel j'ai le résultat suivant :

Code : Tout sélectionner

result: 1, Array ( [0] => 2007 [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => [9] => [10] => 2007 ) result: 1, Array ( [0] => 2007/06 [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => 2007 [9] => 06 ) result: 1, Array ( [0] => 2007/06/03 [1] => [2] => [3] => [4] => [5] => 2007 [6] => 06 [7] => 03 ) result: 1, Array ( [0] => 2007/06/03/ta_mere_en_short [1] => 2007 [2] => 06 [3] => 03 [4] => ta_mere_en_short )
Pas trop ce que j'espère :-(

L'idéal serait d'obtenir un tableau comme le dernier où les arguments optionnels seraient simplement oubliés, mais comme vous pouvez le voir avec le premier tableau, tous les masques sont ajoutés... je ne sais pas quoi faire. Je n'ai rien compris au conditionnel, alors j'implore votre aide éclairée et sympathique.

Merci !!

PS: Sinon, je vais être obligé de me suicider aux petits suisses périmés... yeurk !