Trouver plusieurs chaîne différentes dans une séquence...

pinoche29
Invité n'ayant pas de compte PHPfrance

12 mai 2010, 17:55

Bah non... Mais normalement il est sensé trouver quelque chose puisque la chaîne que je lui donne contient un orf !!
C'est : CCU AUG AGA ACG UCG GUC UAG UCC

Et je ne lui ai pas mis les espaces...

pinoche29
Invité n'ayant pas de compte PHPfrance

12 mai 2010, 17:57

C'est bien ça le code que je dois mettre en haut : /AUG(\w{3})+UAG/iU ?

ViPHP
ViPHP | 5462 Messages

12 mai 2010, 17:58

le regexp n'est pas bon

pinoche29
Invité n'ayant pas de compte PHPfrance

12 mai 2010, 18:10

C'est /AUG(\w{3})+UAG/iU le regexp ?

ViPHP
ViPHP | 5462 Messages

12 mai 2010, 18:13

C'est /AUG(\w{3})+UAG/iU le regexp ?
juste
AUG(\w{3})+UAG
mais il est pas bon

pinoche29
Invité n'ayant pas de compte PHPfrance

12 mai 2010, 18:15

Ah, et qu'est-ce qui ne va pas dedans ?

ViPHP
ViPHP | 5462 Messages

12 mai 2010, 18:19

Ah, et qu'est-ce qui ne va pas dedans ?
le probleme c'est que ca va chercher de AUG jusqu'au dernier UAG et non pas le premier qui trouve et les suivants

pinoche29
Invité n'ayant pas de compte PHPfrance

12 mai 2010, 18:23

Ah donc il faudrait que mon expression en elle-même commence et finisse par AUG et UAG pour que ça marche ? Et Tu ne sais pas comment faire pour que ça marche ? :?

(PS : Je suis vraiment désolée de vs demandez tout ça mais je suis complètement out...)

Eléphant du PHP | 428 Messages

12 mai 2010, 18:26

preg_match_all('/AUG([\w]+)UAG/iU', $adn, $tableau);
Ne marche pas ???

Si un brin ADN situés entre un orf d'ouverture et de fermeture n'est pas nécessairement multiples de 3 et si il est multiple de 3 c'est ce qu'il faut utiliser pourtant.

Pour que ça marche, il faut que la séquence contenant les brins ADN doit absolument contenir les "balises" ORF d'entrée et de sortie AUG et UAG et ce peut importe la longueur de la séquence (que nous appelons en php : chaine).

voir premier message en réponse de ma part.

A+ ;)

Eléphant du PHP | 428 Messages

12 mai 2010, 18:29

Euh... quand je lui demande de m'afficher $tableau il me marque juste "array"... ???
C'est que ta séquence de départ n'est pas bonne il manque des ORF

pinoche29
Invité n'ayant pas de compte PHPfrance

12 mai 2010, 18:39

Non mais il faut ABSOLUMENT que ça soit multiple de 3, sinon le résultat est biologiquement impossible... En fait, en biologie, le brin doit être lu depuis le debut 3 caractères par 3 caractères, donc même ce qui précède AUG doit être une chaîne multiple de 3.

Exemple :

CCU AUG AGA ACG UCG GUC UAG UCC Vrai

CCU CAU GGA ACG UCG GUU AGC UCC Faux

pinoche29
Invité n'ayant pas de compte PHPfrance

12 mai 2010, 18:43

preg_match_all('/AUG([\w]+)UAG/iU', $adn, $tableau);
Ne marche pas ???
Non plus... (je l'ai aussi testé avec le lien de tout à l'heure...)

ViPHP
ViPHP | 5462 Messages

12 mai 2010, 21:19

preg_match_all('/AUG([\w]+)UAG/iU', $adn, $tableau);
Ne marche pas ???
Non plus... (je l'ai aussi testé avec le lien de tout à l'heure...)

ca devrait être ca

Code : Tout sélectionner

AUG(?:\w{3}(?<!UAG))+UAG
on pourrait faire encore plus propre, quelle sont les lettre autorisé ( ACGU ?)

PINOCHE29
Invité n'ayant pas de compte PHPfrance

13 mai 2010, 00:52

Oui c'est ça...

ViPHP
ViPHP | 5462 Messages

13 mai 2010, 01:16

Oui c'est ça...
donc

Code : Tout sélectionner

AUG(?:[ACGU]{3}(?<!UAG))+UAG
test avec un chaine a toi pour voir si ca le fait
$str = 'CCUAUGAGAACGUCGGUCUAGUCCCCUAUGAGAACGUCGGUCUAGUCCCCUAUGAGAACGUCGGUCUAGUCCCCUAUGAGAACGUCGGUCUAGUCC';
preg_match_all('/AUG(?:[ACGU]{3}(?<!UAG))+UAG/u', $str, $matches);
   
print_r($matches);

/*
Array
(
    [0] => Array
        (
            [0] => AUGAGAACGUCGGUCUAG
            [1] => AUGAGAACGUCGGUCUAG
            [2] => AUGAGAACGUCGGUCUAG
            [3] => AUGAGAACGUCGGUCUAG
        )

)

*/