Regexp


#1

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.


#2

Zak Mad a écrit :

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.


#3

Merci pour le lien !

2008/12/6 Bruno M. removed_email_address@domain.invalid