donc mon choix est le bon
Ce qui ne résoud pas mon irrémédiable problème des expressions régulières…
donc mon choix est le bon
Ce qui ne résoud pas mon irrémédiable problème des expressions régulières…
Rien à voir avec la choucroute, mais je fait du SQL de temps en temps et j’ai trouvé cette requête intéressante:
sauf que c’est peut-être un peu plus rapide et simple avec
SELECT max(id) FROM table WHERE statut
=1
merci mais en réalité ce n’est pas ORDER BY id
mais ORDER BY date
et cette date est mise à jour régulièrement. Donc MAX est inutilisable.
Mais je garde l’idée en tete si le pb ce reproduit
Ben le MAX d’une date, c’est le max d’une date? Je veux dire ça revient au même…
bla bla bla
tu veux dire qu’on floode un peu?
c’est vrai que ça a plus grand chose à voir avec les regexp. :ane:
quoi qu’il en soit, la requete telle que tu l’as écrites ne fonctionne pas… alors pour utiliser MAX il faut faire un GROUP BY ou je sais pas quoi et pi voili :heink:
edit: rien à voir, mais en tant que tel, si ca me permet de résoudre mes pb (meme si ils sont autre)
et pour le reste, bah les regexp, je suis completement peaumé :??: en outre, j’arrive pas à faire ce que je veux…
Pourtant c’est super simple
boh, si le mot-clef “max” existe en SQL, c’et qu’il doit-être utilisable
group by, peut-être. dans les op de groupe, il y a aussi les sum(), les count(). je m’était amusé à faire de requête pas mal avec, ça, mais j’ai plus de sql maintenant, faut que tu fasse des essais…
ça te renvoie une erreur? ou une liste de valeurs?
group by statut, ou alors order by id( mais on perd un peu l’intérêt dans ce cas)
disons que ca renvoi des valeurs qui n’ont rien à voir… :bounce:
je reviens à la charge avec mes expression régulières.
Qq’un peut il me dire pq parfois on utilise / en début d’expression et parfois ^
^est sencé etre le début et $ la fin
mais j’ai des expression type
$string = 'April 1, 2003';
$pattern = '[B]/[/B](\w+) (\d+), (\d+)[B]/i[/B]';
$replacement = '$3 <br> $1 <br> $2';
echo preg_replace($pattern, $replacement, $string);
si je remplace le / par ^et le /i par $ ca marche pas
et pq /i à la fin et pas / (qui donne le meme resultat)…
(source php.nert)
Mais? tu as lu le tutorial sur le site de PHP?
Les expressions rationnelles PERL sont spéciales, elles sont besoin d’un délimiteur de début fin et de fin.
Ex: /aaa/
@aaa@
<aaa>
Après le délimiteur de fin tu peux préciser les options.
Lis bien la doc, c’est pas franchement compliqué.
mon esprit inférieur doit avoir un problème. Pcq je te jure que j’ai lu cette doc. Et rien n’y fait. Ca ne rentre pas.
Enfin, je m’y replonge…
edit, une petite question: j’ai une chaine qui fait plusieurs lignes? qsq je dois utiliser (étant donné que le pts ne joue pas sur pls lignes?)
aidez moi…
Tjs par rapport au message de base:
j’ai réussi à faire ca:
$patern = '/([0-9]{1,5}\s+)(posté par\s+)(\w+)-(\w+)-(\d+)(\s+le\s)(\d+\/\d+\/\d+\s+)(\d+:\d+\s)(GMT)(\n\n.*)(\w+)/i';
qui filtre ceci
$string = '555 posté par XXX-XX-555 le 01/01/2005 10:20 GMT
XXX
555 posté par XXX-XX-555 le 01/01/2005 10:20 GMT
XXX';
de la manière suivante:
$replacement = '$1 - $3-$4-$5 ($7 - $8) <br />';
echo preg_replace($pattern, $replacement, $string);
qui retourne:
555 - XXX-XX-555 (01/01/2005 - 10:20 )
555 - XXX-XX-555 (01/01/2005 - 10:20 )
Jusque là tout va bien.
Le problème (énoncé dans le post précédent) est que le XXX est sur plusieur ligne…
Que faire?
Merci d’avance,
titib
Déjà :
$patern = ‘@([0-9]{1,5})\s+posté par\s+(\w+)-(\w+)-(\d+)\s+le\s(\d+/\d+/\d+)\s+(\d+:\d+)\sGMT\n\n.*(\w+)@i’;
Ce qui évite un surplein de parenthèses (Posté le, tu veux vraiment matcher ça?)
Ensuite, tu as les options de PCRE qui passent après le délimiteur de fin (c’est le but de ces fameux délimiteurs : ça vient de Perl, en dedans tu ne mets pas les expressions dans une chaîne, c’est directement l’expression régulière) : celle que tu veux, c’est s.
/a.*a/si
matche
a
p
a
Et tu peux l’appliquer de manière interne : /a((?s).*)a/i.
Note bien que j’ai réécris ton expression avec @ comme délimiteur: tu peux mettre ce que tu veux tant que ça compile
quelle différence entre @ et / comme délimitateur?
autre chose, tu me demande si je veux vraiment matcher “posté le”, mais pq ne le voudrais-je pas? C’est un texte qui est la comme une cst, pq ne pas le matcher?
merci beaucoup en tk
euh… petite chose: je ne vois pas cmt ca fct.
Pcq si je reprend ton exemple:
$string = 'a
p
a';
echo preg_replace('/a.*a/si',?????,$string);
je dois mettre quoi dans ???
pcq il ne me trouve pas les $1, $2…
j’ai le meme pb appliqué à mon histoire :S
Quand je dis matcher, je veux dire "capturer". Désolé.
En gros les parenthèses permettent de capturer des sous chaînes, et là c’est pas trop utile.
Pour ce qui est de @ et /, y a une différence: quand tu utilises @ tu n’as pas besoin de protéger / (ggenre /\// == @/@), mais tu pourrais très bien utiliser < et >, # et #, _ et _, etc.
En Perl (ou en javascript en fait), tu écris l’expression comme ça :
if ( x.match(/a.*/) )
…;
où x est une chaîne : ici / est un délimiteur. C’est comme pour les chaînes : ça permet de dire où commence et où finit l’expression rationnelle…
(c’est logique : délimiteur)
mais pour récupérer ma chaine de plusieurs lignes, je fais cmt?
…
Les $n correspondent aux parenthèses.
Si y a pas de parenthèses, $n ne marche pas. C’est pour capturer une expression que l’on utilise les parenthèses (en plus de forcer la priorité).