Expression régulière

Eléphant du PHP | 132 Messages

27 août 2007, 16:34

Salut à tous (et désolé pour ce titre pas très explicite),

J'ai un petit problème avec ce motif tout simple : #<script (.*)># que je souhaite appliquer sur (par exemple) <script type="text/javascript" src="scripts/main.js"></script> avec un preg_match(motif, variable, $matches).
Le print_r($matches) me donne:

Code : Tout sélectionner

Array ( [0] => <script type="text/javascript" src="scripts/main.js"></script> [1] => type="text/javascript" src="scripts/main.js"></script )
Alors que je voudrais uniquement récupérer type="text/javascript" src="scripts/main.js" (pour une fonction d'indentation).

Comment faut-il faire pour s'arrêter au premier ">" ?

Bonne soirée
:: Kmeleon ::
CanalPC - La webradio communautaire :: Ecrivez/Enregistrez/Ecoutez !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 août 2007, 16:39

Il te faut utiliser l'option U inverser la tendance à la gourmandise des expressions rationnelles, c'est à dire qu'elles vont prendre par défaut la chaine la plus longue correspondant au pattern. L'option U évite ceci :
#<script (.*)>#U
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 132 Messages

27 août 2007, 16:43

Milles merci, ça marche parfaitement. Le pire c'est que je connaissait ce truc :oops:
:: Kmeleon ::
CanalPC - La webradio communautaire :: Ecrivez/Enregistrez/Ecoutez !

ViPHP
ViPHP | 2287 Messages

27 août 2007, 17:06

Ou sinon, quelquechose comme ça :
#<script([^>]*)>#
if(!@work()){ Nespresso(); } else { what(); }
______________________________