2008-11-13 8 views
4

Comment puis-je faire correspondre (PCRE) tout ce qui se trouve entre deux balises?Correspond à tout ce qui se trouve entre deux balises avec des expressions régulières?

J'ai essayé quelque chose comme ceci: (. *)

< - - \ de * LoginStart \ s * > < - \ de * LoginEnd \ s * - >

Mais ça n'a pas trop bien pour moi ..

Je suis un peu nouveau pour exprimer régulièrement ions, donc j'espérais que quelqu'un serait assez gentil pour m'expliquer comment j'accomplirais cela, si c'est possible avec des expressions régulières.

Merci

Répondre

12
$string = '<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->'; 
$regex = '#<!--\s*LoginStart\s*-->(.*?)<!--\s*LoginEnds\s*-->#s'; 

preg_match($regex, $string, $matches); 

print_r($matches); // $matches[1] = <div id="stuff">text</div> 

explications:

(.*?) = non greedy match (match the first <!-- LoginEnds --> it finds 
    s = modifier in $regex (end of the variable) allows multiline matches 
     such as '<!-- LoginStart -->stuff 
       more stuff 
       <!-- LoginEnds -->' 
1

PHP et regex? Voici quelques suggestions:

'/<!--\s*LoginStart\s*-->(.*)<!--\s*LoginEnd\s*-->/Us' 

Peut-être mieux - le U capitalisé rend le regex non gourmand, ce qui signifie qu'il va arrêter au premier <!-- qui peut fonctionner. Mais l'important est le s, qui dit à la regex de faire correspondre une nouvelle ligne avec le caractère .. En fonction de la certitude que vous avez sur la capitalisation, l'ajout d'un i à la fin rendra la recherche dans la regex insensible à la casse.

+0

Le démarquage peut-il être plus ennuyeux? –

0

i ont essayé la réponse de Owen mais son échoue pour les conditions comme

<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->"DONT MIND THIS"<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->

Cela inclut la ligne "dont mind CE" aussi, c'est il couvre tout le contenu dans le premier <! - LoginStart - > et dernier <! - LoginEnds - > tag

Questions connexes