|
|
|
|
Bonjour,
J'ai un petit problème avec une expression régulière pour détecter une chaine de caractère.
J'utilise le langage Perl.
Voilà je cherche à détecter des déclarations de tableaux, j'ai donc codé ceci:
if ($Data =~ /[ \t]*typedef[ \t]*([0-9a-zA-Z_]+)[ \t]*([0-9a-zA-Z_]+)[ \t]*\[[ \t]*([0-9a-zA-Z_]+)[ \t]*\][ \t]*;/)
{
...
}
Mon problème vient du fait que ça ne marche pas pour la déclaration suivante:
typedef T_RB_MODE T_DL_HS_URLC_MODE_CT_LIST [MAX_NOF_DL_HS_URLC_MODE_CT_LIST];
alors que pour celle ci ça marche:
typedef T_DL_HS_PDU_SIZE_DESCR T_DL_HS_PDU_SIZE_LIST[MAX_NOF_DL_HS_PDU_SIZE_ENTRIES];
En regardant bien, la seule différence c'est l'espace avant le crochet ouvrant.
Pourtant c'est géré dans l'expression régulière.
Si quelqu'un a déjà eu le problème.
Merci de m'aider.
Configuration: Windows XP Firefox 2.0.0.13
Salut,
root@debian:~# cat fic typedef T_RB_MODE T_DL_HS_URLC_MODE_CT_LIST [MAX_NOF_DL_HS_URLC_MODE_CT_LIST]; typedef aaaa; typedef T_DL_HS_PDU_SIZE_DESCR T_DL_HS_PDU_SIZE_LIST[MAX_NOF_DL_HS_PDU_SIZE_ENTRIES]; n'importe quoi root@debian:~# perl -ne 'print if /^typedef/' fic typedef T_RB_MODE T_DL_HS_URLC_MODE_CT_LIST [MAX_NOF_DL_HS_URLC_MODE_CT_LIST]; typedef aaaa; typedef T_DL_HS_PDU_SIZE_DESCR T_DL_HS_PDU_SIZE_LIST[MAX_NOF_DL_HS_PDU_SIZE_ENTRIES]; root@debian:~# perl -ne 'print if /^typedef.*\ [ [ ^ \ ] ] + \ ] ; /' fic typedef T_RB_MODE T_DL_HS_URLC_MODE_CT_LIST [MAX_NOF_DL_HS_URLC_MODE_CT_LIST]; typedef T_DL_HS_PDU_SIZE_DESCR T_DL_HS_PDU_SIZE_LIST[MAX_NOF_DL_HS_PDU_SIZE_ENTRIES]; root@debian:~#A enlever les espace que j'ai mis dans la regex il y a des problèmes avec les balises 106485010510997108 |
Voici un exemple un peu mieux
:~$ cat the_pit typedef T_RB_MODE T_DL_HS_URLC_MODE_CT_LIST [MAX_NOF_DL_HS_URLC_MODE_CT_LIST]; alors que pour celle ci ça marche; typedef T_DL_HS_PDU_SIZE_DESCR T_DL_HS_PDU_SIZE_LIST[MAX_NOF_DL_HS_PDU_SIZE_ENTRIES]; typedef TYPE VAR[SIZE]; --> ça passe typedef TYPE VAR [SIZE]; --> ça ne passe pas :~$ perl -ne 'next unless /^typedef\s+(.*?)\s+(.*?)\s*\[([^\]]+)\]/; print "\ntype=$1\nnom=$2\ntaille=$3\n\n"' the_pit type=T_RB_MODE nom=T_DL_HS_URLC_MODE_CT_LIST taille=MAX_NOF_DL_HS_URLC_MODE_CT_LIST type=T_DL_HS_PDU_SIZE_DESCR nom=T_DL_HS_PDU_SIZE_LIST taille=MAX_NOF_DL_HS_PDU_SIZE_ENTRIES type=TYPE nom=VAR taille=SIZE type=TYPE nom=VAR taille=SIZE :~$ 106485010510997108 |