\w+ c’est pour les mots.
\n c’est un caractère blanc. Alors ne cherche même pas à capturer une séquence contenant des caractères blancs avec une séquence capturant des caractères de mots, hé :o
La clause LIMIT peut être utilisée pour limiter le nombre d'enregistrements retournés par la commande SELECT . LIMIT accepte un ou deux arguments numériques. Ces arguments doivent être des entiers constants.Avec un argument, la valeur spécifie le nombre de lignes à retourner depuis le début du jeu de résultat. Si deux arguments sont donnés, le premier indique le décalage du premier enregistrement à retourner, le second donne le nombre maximum d'enregistrement à retourner. Le décalage du premier enregistrement est 0 (pas 1) :
Pour être compatible avec PostgreSQL, MySQL supporte aussi la syntaxe : LIMIT row_count OFFSET offset .
mysql> SELECT * FROM table LIMIT 5,10; # Retourne les enregistrements 6 à 15
Si tu arrive à coller Sans-Nom, tu va forcément limiter le nombre d’interlocuteurs!
Juste pour moi, les expressions rationnelles, c’est une analyse lexicale, et pour faire selon les règles de l’art, il faut ajouter une couche d’analyse syntaxique (des grammaiers) et une analyse sémantique (du code ad-hoc)
titib> en théorie des langages, il est bien connu que a{n}b{n} ne peut pas être reconnu par un automate, et qu’il ne s’agit pas d’un langage rationnel. Un langage rationnel peut normalement se transcrire en une expression rationnel. Donc, à partir de là un constat s’impose : les expressions régulières ne permettent pas de tout solutionner.
Ce que te propose deltree, c’est de faire de l’analyse lexicale pour couper tes chaîne à insérer en différentes parties, et ensuite de passer un analyseur syntaxique (un automate à pile, en somme) pour justement analyser la chaîne.
(mais bon, je pige pas pourquoi tu veux parser cette chaîne, dans quelle but ? N’as tu pas moyen d’avoir une chaîne plus facile à analyser? )
j’ai pas vraiment tout compris à votre charabiat à tous les deux, mais bon
le but de l’opération est que l’utilateur face un copier/coller d’une page web qui se structure comme donné précédement), et de récupérer les différentes informations, et, soit les remettres directement en forme (comme montré ds le post en page 2) soit en les intégrant à une db.
L’autre solution étant que l’utilisateur décompose lui meme les données. Mais si une page comptient une 20 aines de lignes de ce genre, cela fait une vingtaine de fois 3 (titib-P-ABC-123, 10/06/2005 13:29, bla bla<br /><br />bla bla) copier/coller… soit 60 copier/coller au lieu d’un seul…
La théorie des langages c’est un truc costaud qu’on voit en études d’informatiques, entre autre pour écrire des compilateurs, interpréteurs, ou tout autre parser, et ce de façon scientifique. On peut étudier ces théorie avec une approche “mathématique” et démontrer qu’un automate (en gros l’algo de découpage) est réalisable ou pas. pour moi, c’est loin, et je n’ai retenu que le strict minimum pour écrire un parser de a à z, selon les règles de l’art.
définir les mots du langage sous forme d’un ensemble L. exemple informel L={"{","}",(,),[,],"[a-z][0-9]*"} pour un langage pseudo-C, (et bourré de fautes sur les expressions rationnelles).
cette étape te permet d’écrire ton analyseur lexical indépendamment de ce que tu en fera, tu te contente de lire des “mots” qui correspondent aux ids, opérateurs, délimiteurs…
on peut utiliser flex pour faire cette analyse, ou les expressions régulières que tu utilise, ou faire du code manuel pour découper tes chaines de façon basique.
Définir la gramaire du langage, avec un ensemble de règle formalisées, et qui finissent sur des mots du langage défini précédemment.
exemple:
S-> fonctions
fonctions->fonction fonctions
fonction->type id(argumentsdecl){instructions}
instructions->instruction instructions
instruction->id(arguments);|expression;
expression-> (etc; etc; etc.)
tu peux écrire cette partie avec du yacc, bison, ou avec des fonctions qui simulent les appels de règles (il y a une méthode pour ça mais ce serais un peu long ici)
petite note: plus tu fait un analyse syntaxique poussée, plus simple sera ton analyse lexicale et inversement. Il n’y a donc pas une solution unique à un problème donné.
couche sémantique
sur chaque appel de règle tu contrôle le typage, la cohérence, bref, la sémantique ,et soit tu rempli un arbre de données correspondant à tes règles, dans le but de le réutiliser plus tard, soit tu lance directement ce que tu a à faire (interprétation par exemple).
:hello:
Tout ça c’est un peu général, mais c’est un des rares domaines de l’informatique très formalisé, et qui ne laisse aucune place au hasard si on le fait dans les règles de l’art. Donc si ça peut s’adapter à ton problème.
Dans ton cas, apparamment tu cherche à parser du HTML? (désolé je n’ai pas tout lu), Dans ce cas, tu pourrais utiliser un parser XML, ils sont déjà écris, ça te donne un arbre DOM (Document Object Model) correspondant à l’arbre de données dont je parle dans la partie 3)
Tout ça pour dire: les expression régulière correspondent donc à la partie lexicale d’un parser, et quand on doit parser des choses complexes, il faut passer aux grammaires, ne serais-ce que pour le formaliser sur papier.
je pense qu’il faudrait que j’achete un gros bouquin ou que je fasse des études là dedant pour comprendre le charabiat que tu me sors.
Désolé si je te vexe, ce n’est pas le but, mais je n’ai strictement rien compris. Sans doute ma tite tête qui est pas très efficace…
disons que moi je n’ai appris à coder (enfin, c’est prétencieux ca…) uniquement sur des sites, forums (merci Sans-Nom :p), et autre tutos… Donc la théorie j’en ai peu voir pas du tout…
concretement, dans ce cas précis (ce n’est pas du html, c’est un copier/coller d’une page, ce qui sort du texte brut), tu utiliserais quel type de technique? (que je sache vers quoi me diriger)?
La théorie des langages est certes peut être pas si simple, mais les grammaires et l’analyse lexicale, c’est pas si complexe à piger (mais je comprend que tu ne veuilles pas, hein) puisque principalement tu appliques un algo tout bête (LL(1), LR(1), LALR(1), LR(0), etc)
Mais bon, en PHP faire un lexer + parser pour ça, c’est éxagérer tu vas prendre plus de temps à l’écrire, qu’à analyser, d’où : utilise des fonctions, découpe tes chaînes à la main.
C’est tout.
Sur du papier, analyse ta chaîne, à quoi elle ressemble et pouf !