[PHP]un 'tit problème de regex

Résolu/Fermé
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 - 13 févr. 2008 à 16:51
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 - 13 févr. 2008 à 19:10
Bonjour à tous et toutes,
J'ai un petit problème d'expression régulière. Je m'explique : j'ai un texte au format suivant :

>P15711|104K_THEPA 104 kDa microneme/rhoptry antigen precursor - Theileria parva
MKFLILLFNILCLFPVLAADNHGVGPQGASGVDPITFDINSNQTGPAFLTAVEMAGVKYL
QVQHGSNVNIHRLVEGNVVIWENASTPLYTGAIVTNNDGPYMAYVEVLGDPNLQFFIKSG
DAWVTLSEHEYLAKLQEIRQAVHIESVFSLNMAFQLENNKYEVETHAKNGANMVTFIPRN
GHICKMVYHKNVRIYKATGNDTVTSVVGFFRGLRLLLINVFSIDDNGMMSNRYFQHVDDK
YVPISQKNYETGIVKLKDYKHAYHPVDLDIKDIDYTMFHLADAT

Et je souhaiterais récupérer dans 2 variables distinctes les données comprises entre le > et | dans la première variable, et les données en majuscule (à partir de la deuxième ligne et jusqu'à la fin) dans la deuxième variable. Pour schématiser, j'ai
>XXXXX|Yyyyyy yyyyy yyyyyyyy yyyyyyy y yyyyyy yyyyy
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

et je voudrais obtenir :
$Nom = XXXXX et $seq = ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ...

Voilà, j'ai déja créé ceci comme expression régulière :
"#>([A-Z0-9]+)|[a-zA-Z0-9_]+\r\n([A-Z]+)#"

Ca marche très bien pour les XXXXX mais il ne me renvoit rien pour les ZZZZZZZZZZ
Why ?

Merci d'avance :D
A voir également:

9 réponses

sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
13 févr. 2008 à 18:58
Mais c'est bien sûr, l'erreur la plus grosse était bien le \r\n qui devait se transformer en \n
L'espace je l'avais mis, j'ai juste oublié de le recopier mais bon peu importe, CA MARCHE !!!

Merci beaucoup à vous tous
2
regarde sur https://openclassrooms.com/fr/courses

si cela peut t'aider, je vais regarder ton code ^^
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
13 févr. 2008 à 17:02
Le tuto du site du zéro, pas de problème, je le connais par coeur à force de taper dedans, mais autant d'habitude j'avais pas de problème (ou plutôt si j'en avais mais je m'en sortais), autant là !!!! Vraiment je vois pas.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
13 févr. 2008 à 17:15
Bonjour,

a mon avis c'est un pb de methode.

Une piste:

variable1 = ce qui commence par ">" et finit par "|" (par une regex)
puis par un substr j'enlève le ">" du debut et le "|" de la fin

variable2= commence par une minuscule, puis au moins N majuscules et finit par une majuscule (par une Regex encore)

pareil tu vires ensuite ce qui est en trop.

@lain
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
13 févr. 2008 à 17:19
Bonjour,

Le problème vient du caractère | qui veut dire "OU" dans une expression rationnelle* !
Il faut l'échapper en mettant un \ devant...

Xavier

* Et non pas « expression régulière », qui est une mauvaise traduction de l'anglais « regular expression »
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
13 févr. 2008 à 17:36
Ca j'ai essayé, de l'échapper le | dans mon expression rationnelle* mais dans ce cas là je n'obtient plus rien du tout et je ne comprend pas non plus pourquoi...

* Et en Breton ça se dit comment "regular expression"

Sinon pour Alain_42, étant donné que je vais bosser sur quelque centaines de milliers de séquences, je préfère limiter le nombre de fonctions utilisées pour aller un peu plus vite, et je sais que les expression rationnellles permettent de le faire
-
Proverbes breton :
Si les mouettes ont pied, il est temps de virer
Il vaut mieux être saoul que con, ça dure moins longtemps
0
ceddec Messages postés 148 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 10 mars 2012 82
13 févr. 2008 à 18:31
Bonjour,

Je pense aussi qu'il faut protéger le | et il manque l'espace pour ton test sur les yyy. Il manque aussi les retours à la ligne pour les zzz

L'expression deviendrait :
>([A-Z0-9]+)\|[a-zA-Z0-9_ ]+\r\n([A-Z\r\n]+)

Il faut aussi s'assurer que ton retour à la ligne se fait bien avec \r\n et non pas avec \n

0
Jean-François Pillou Messages postés 18707 Date d'inscription lundi 15 février 1999 Statut Webmaster Dernière intervention 16 février 2023 63 267
13 févr. 2008 à 19:02
Pour être sûr que ça fonctionne, il faut penser à mettre les commutateurs s et m à la fin indiquant respectivement que les parenthèses sont capturantes et que la regexp est multiligne :

"#>([A-Z0-9]+)|[a-zA-Z0-9_]+\r\n([A-Z]+)#sm" 
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
13 févr. 2008 à 19:10
ah ben j'ai appris quelque chose là... Merci beaucoup de la précision :D
0