Zak Mad a écrit : > Bonjour, > Je tente de trouver une regexp qui matche la string suivante : > > s = '[03/Nov/2008:13:21:15 +0100] 10.37.93.39 > http://profile.ak.facebook.com/v225/1712/24/t779560544_7637.jpg > "3362,287562259289457,18+=-,GPRS,0,wapsfr,0,0,,300,110000100000000000000000000000000,WAP2.0,95,0,10.37.93.39" > "-" TCP/200 HTTP/1.1 GET 60 0.060 - 1043 200 1802 266 200 > "SEC-SGHE900/1.0 NetFront/3.2 Profile/MIDP-2.0 Configuration/CLDC-1.1"' > > sachant que le séparateur de champ est le caratère vide 'espace' et > aussi que le premier et le 3ème champ peuvent contenir des espaces (pour > le premier c'est systématique). > Voici les regex que j'ai : > > regex = > "^[(.*?)\]\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|-)\s([^\s]+)\s"([^,]+|-),[^,]*,[^,]*,([^,]+|-),[^,]*,([^,]+|-),[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,([^,]+|-),([^,]+|-),([^,]+|-),([^,]+|-)"\s"([^"]+)"\s(([^\s]+)/(\d+|-))\s([^\s]+|-)\s([^\s]+|-)\s(\d+|-)\s(\d+\.\d+|-)\s(\d+|-)\s(\d+|-)\s(\d+|-)\s(\d+|-)\s(\d+|-)\s(\d+|-)\s"(.+?)"\s*$" > > qu'est ce que j'ai loupé? > Merci pour votre aide.
Bonjour, alors voici quelques conseils qui devraient t'aider à t'en sortir. Tout d'abord, il est préférable d'écrire les regexps entre deux slashs plutôt que des quotes (sinon, il faut doubler le nombre d'antislashs pour protéger les caractères). Ensuite, il faudrait protéger le [ au début de ta regexep avec un \. Il faudrait également utiliser " à la place des ". Enfin, si cela ne fonctionne toujours pas, je te conseille de jouer avec http://www.rubular.com/ pour tester ta regexp. ++ Bruno PS : regex = /^\[(.*?)\]\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|-)\s([^\s]+)\s"([^,]+|-),[^,]*,[^,]*,([^,]+|-),[^,]*,([^,]+|-),[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,([^,]+|-),([^,]+|-),([^,]+|-),([^,]+|-)"\s"([^"]+)"\s(([^\s]+)/(\d+|-))\s([^\s]+|-)\s([^\s]+|-)\s(\d+|-)\s(\d+\.\d+|-)\s(\d+|-)\s(\d+|-)\s(\d+|-)\s(\d+|-)\s(\d+|-)\s(\d+|-)\s"(.+?)"\s*$/ devrait fonctionner. --~--~---------~--~----~------------~-------~--~----~ Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour résilier votre abonnement envoyez un e-mail à l'adresse [EMAIL PROTECTED] -~----------~----~----~----~------~----~------~--~---
