Pb utilisation regex

peaulisse -  
 peaulisse -
Bonjour à tous,

voila, je débute en programmation regex sous php, pour creer des routines d'url rewriting, et g kk souçis pour m'en sortir :)

voici mon problème :
je créé un petit programme pour decouper un article en plusieurs pages, et je voudrais écrire un regex qui me permette d'afficher plusieurs types d'url de pages , comme ceci :
http://www.mondomaine.com/actu/2010/03/17/titre_article
http://www.mondomaine.com/actu/2010/03/17/titre_article/1
http://www.mondomaine.com/actu/2010/03/17/titre_article/2

si mon article est découpé en 2 pages.

dans mon lighttpd.conf (je travaille sous lighttpd debian), j'ai écrit la regex suivante qui me permet de matcher les 3 url :
"^/(.*\/\d{4}\/\d{2}\/\d{2})/([0-9a-zA-Z-_]+)/?([0-9{0,1})$" => "/index.php?module=$1&opts=$2&pagination=$3"

le pb, c que cette regex ne permet plus d'afficher une url de cette sorte :
http://www.mondomaine.com/actu/insolite (actu et insolite etant des categorie d'articles)

j'ai kan mm trouvé une regex qui me permet de gérer cette derniere url:
"^/(.*)/(.*)?$" => "/index.php?module=$1&opts=$2", mais des que je la rends active, ce sont mes ul paginées qui ne matchent plus...

voila, voila...si une ame charitable pouvait-il m'aider à matcher toutes les url, ce serait trop sympa :)

merci d'avance a tous !
merci d'avance à tous !!

4 réponses

Zep3k!GnO Messages postés 2049 Statut Membre 200
 
Salut,
moi avec cette regExp la, je match les 3 :

^/([^/]+/[0-9]{4}/[0-9]{2}/[0-9]{2}/[0-9A-Za-z_-]+)(/[0-9]{0,1})?$


car avec l'autre, moi ça passait aps, je pense qu'il y a eu un pb de copier/coller.

c'est quoi tous les types d'URL que t'as a rewriter ?
Genre toutes les formes génériques que tu veux rewrite.

Enjoy !
Comme le dirai shakespear : [bb]|[^b]{2} that is the question...

Zep3k!GnO
On est des rangers mec, des rangers...
0
peaulisse
 
je vois ke 2 parentheses capturantes dans ta regexp, comment tu fais pour récupérer le $3 de la pagination (soit 1,2 si mon article est découpé en 2 pages) ?
et matcher la 4e url (actu/insolite) ?

ben je voudrais récupérer :
http://www.mondomaine.com/actu/2010/03/17/titre_article
http://www.mondomaine.com/actu/2010/03/17/titre_article/1
http://www.mondomaine.com/actu/2010/03/17/titre_article/2

$1 : actu/2010/03/17/
$2 : titre_article
$3 : 1 ou 2
et avec la derniere url http://www.mondomaine.com/actu/insolite
$1 : actu
$2 : insolite

merci
0
Zep3k!GnO Messages postés 2049 Statut Membre 200
 
salut,
J'ai trouvé ça, mais il faut concaténer certains résultats pour avoir ce que tu veux, je te met le p'tit script de test, sinon l'expression utilisée est bien ^/([^/]+)((/[0-9]{4}/[0-9]{2}/[0-9]{2}/)([0-9A-Za-z_-]+)/?([0-9]{0,1})?|/([a-z]+))$:
<?php 
$aData[] = "/actu/2010/03/17/titre_article"; 
$aData[] = "/actu/2010/03/17/titre_article/1"; 
$aData[] = "/actu/2010/03/17/titre_article/2"; 
$aData[] = "/actu/insolite"; 

    foreach($aData as $sString){ 
        preg_match_all("@^/([^/]+)((/[0-9]{4}/[0-9]{2}/[0-9]{2}/)([0-9A-Za-z_-]+)/?([0-9]{0,1})?|/([a-z]+))$@", $sString, $aMatches ); 
        echo "<hr/>$sString :"; 
        echo "<br/> 1 : ".$aMatches[1][0].$aMatches[3][0]; 
        echo "<br/> 2 : ".$aMatches[4][0].$aMatches[6][0]; 
        echo "<br/> 3 : ".$aMatches[5][0]; 
    } 
?> 


EnJoY !

Zep3k!GnO
On est des rangers mec, des rangers...
0
peaulisse
 
merci , je vais tester tout ça
0