|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre confirmé
![]() Inscription : décembre 2002 Messages : 452 ![]() |
Bonjour,
Cela me désole, des qu'il s'agit d'une regex un peu compliqué, cela ne marche jamais avec moi.
Citation:
J'ai fais le choix d'utiliser le caractère # délémiteur pour que ce soit un peu plus claire au du \. J'ai tenté ceci mais cela me mets comme erreur : Citation:
Je vous explique comment j'ai ecris mon pattern. N'hesitez pas à me corriger la ou mon raisonnement n'est pas correct. J'ai donc fais expres de bien comment j'ai écris le pattern. pattern : \(^.*)\t\(.*)\t(.*$) Le premier sous ensemble : Le premier sous ensemble commence dès le début de la ligne (utilisation de ^) et et est une suite de 1 ou plusieurs caractères : Le premier sous ensemble s'arrete a la première tabulation, je mets donc juste apres le premier sous \t Pour que le premier sous ensemble soit bien reconnu comme sous ensemble, je mets un \ Le deuxième sous ensemble : Le deuxième sous ensemble commence juste apres la première tabulation et il est constitué de n'importe quel caractères et se termine par la 2ème tabulation : Le troisième sous ensemble : Le troisième sous ensemble est commence apres la 2ème tabulation. Il est constitué de n'importe quel caractère et est à la fin de la ligne (utilisation de $) Ou me suis je trompé ? |
||
|
|
00
|
|
|
#2 | |||
|
Membre expérimenté
![]() Inscription : mars 2007 Messages : 469 ![]() |
Citation:
Tout d'abord, bonne idée de mettre '#' au lieu de '/', c'est déja +clair Important à savoir, la recherche .*\t est de type "gourmande". C'est à dire que la recherche ne s'arrêtera pas à la 1ère tabulation rencontrée mais à la dernière. Exemple : 33\t77\t33 Astuce pour ne sélectionner que jusqu'à la 1ère tabulation : ^[^\t]*\t/ Signifie : sélectionne ( à partir du début de la ligne ^ ) tous les caractères différents de tabulation ( [^\t] ) présents 0 ou n fois ( * ) jusqu'à la tabulation suivante ( \t ). Résultat : 33\t77\t33 Pour mémoriser une partie de la chaîne, en l'occurence les chiffres sans la tabulation : \( \) ^\([^\t]*\)\t Avec ces éléments, tu peux décoder l'instruction ci-dessous qui doit fonctionner :s#\(^[^\t]*\)\t\([^\t]*\)\t\([^\t]*$\)#insert MATABLE set f1='\1', f2='\2', f3='\3'# http://www.shellunix.com/regexp.html
__________________
Loi de Murphy: La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi. La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi. |
|||
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() Inscription : décembre 2002 Messages : 452 ![]() |
Tout d'abord, merci mille fois BlaireauOne.
J'ai vraiment compris le truc. Je ne regarde pas ma regex sur mon post, je l'as refais à chaque fois que j'en ai besoin. Par contre je bloque sur une date. J'ai une date francais, j'aimerais bien la convertir au format iso yyyy-mm-dd. J'aimerais le faire en php avec preg_replace par exemple mais avant tout j'aimerais bien tester sous gvim. J'ai donc fais ceci : Code :
%s#\([0-9{1,2}\)\/\([0-9{2}\)\/\([0-9{2,4}\)#\3-\2\1#g E:488 caractères surnuméraires Qu'est ce que cela veut dire ? J'ai regardé sur google mais que de chi : http://www.google.fr/search?hl=fr&q=...chercher&meta= |
|
|
00
|
|
|
#4 | |
![]() ![]() Arnaud FeltzDéveloppeur .NET Inscription : août 2005 Messages : 5 204 ![]() |
Citation:
Code :
%s#\([0-9]{1,2}\)\/\([0-9]{2}\)\/\([0-9]{2,4}\)#\3-\2\1#g
__________________
C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère Installation de Code::Blocks sous Debian à partir de Nightly Builds
|
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() Inscription : décembre 2002 Messages : 452 ![]() |
ahh super. C'etait du a cela pour mon erreur.
Lorsque j'execute cela me met motif introuvable alors que je mets mon curseur avec 12/12/2006.... Je ne vois pas ou j'ai fais une faute dans mon pattern. Je fais une recherche d'une suite de chiffre (1 seul ou 2) puis le caractère / d'une suite de chiffres (2 chiffres uniquement) puis le caractère / et une suite de chiffres (2 ou 4 chiffres) L'espression peut se trouver n'importe ou dans la ligne, je n'ai donc pas spécifié ni de ^ ni de $ |
|
|
00
|
|
|
#6 | |
|
Membre expérimenté
![]() Inscription : mars 2007 Messages : 469 ![]() |
Citation:
Il ne manque plus que des antislash devant les accolades ouvrantes et fermantes et ça marche Petit conseil. Si PB de ce genre, faire une recherche progressive du + simple au + complexe. Sous vim, recherche de chaîne / /[0-9] OK, on continue /[0-9]{2} pas OK, on appelle l'aide en ligne :help pattern
__________________
Loi de Murphy: La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi. La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com