[LUA] - [RESOLU] - Regex - string.match() qui match à moitié...

- Regex - string.match() qui match à moitié... [LUA] - [RESOLU] - Divers - Programmation

Marsh Posté le 09-04-2021 à 20:29:51    

Hello !
 
Vu que je suis une burne en regex, je n'arrive pas à faire un truc tout con :
 
J'ai une chaine qui contient  
 
un code hexa suivi de CRLF suivi d'une chaine
 
je veux récupérer le code hexa, et la chaine
 

Code :
  1. -- chaine
  2. local txt = '50f\r\nCoucou\r\nComment ca va ?'
  3. -- recup
  4. hexa, reste = string.match(txt, '([^0-9A-Fa-f]+)\r?\n(.*)')
  5. -- debug
  6. print('hexa='..hexa)
  7. print('hexa byte='..string.byte(hexa))
  8. print('len hexa='..string.len(hexa))
  9. print('reste='..reste)
  10. print('len reste='..string.len(reste))


 
=> debug
 


hexa=  
hexa byte=13
len hexa=1
reste=Coucou Comment ca va ?
len reste=23


 
 
Pourquoi ([^0-9A-Fa-f]+) ne me retourne que "\n" ??
 
Merci de m'expliquer où je me foire :)
 
Ps: hexa peut faire 'n' caractères suivi de \r\n ou \n


Message édité par spark le 09-04-2021 à 20:49:02

---------------
Un cycle complet sera une série de 100.
Reply

Marsh Posté le 09-04-2021 à 20:29:51   

Reply

Marsh Posté le 09-04-2021 à 20:43:10    

Connais pas LUA, mais en Perl le ^ inverse le contenu de [ ], autrement dit le regex sera vrai pour tout caractère NON contenu dans le [ ]. Tu voulais probablement mettre le ^ devant le [ ] ou il signifie début de chaîne?

Reply

Marsh Posté le 09-04-2021 à 20:44:26    

ca signifie le début de la chaine, et ca me retourne pas \n (10), mais \r (13)


---------------
Un cycle complet sera une série de 100.
Reply

Marsh Posté le 09-04-2021 à 20:45:53    

Oui, mais pas début de chaîne si on le place à l'intérieur d'un [ ] non?
 
Regarde bien:
 
^[a-f...]
[^a-f...]
 
Après je peux me tromper. :o

Reply

Marsh Posté le 09-04-2021 à 20:46:03    

ha ben non -_-'''
 

Code :
  1. hexa, reste = string.match(txt, '([0-9A-Fa-f]+)\r?\n(.*)')


 
hexa=50f
hexa byte=53
len hexa=3
reste=Coucou
Comment ca va ?
len reste=23
 


---------------
Un cycle complet sera une série de 100.
Reply

Marsh Posté le 09-04-2021 à 20:47:10    

hexa, reste = string.match(txt, '^([0-9A-Fa-f]+)\r?\n(.*)')
 
est la solution !
 
Merci bcp rat de combat !!!! :jap:


---------------
Un cycle complet sera une série de 100.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed