2010-03-26 3 views
6

supposons que le corps de $ est égal àpreg_replace: modificateur inconnu

something 
that 
does 
not 
interest 
me 
<!-- start --> 
some 
html 
code 
<!-- end --> 
something 
that 
does 
not 
interest 
me 

Si je

$body=preg_replace("(.*)<!-- start -->(.*)<!-- end -->(.*)","$2",$body); 

J'obtiens:

Warning: preg_replace() [function.preg-replace]: Unknown modifier '<' 

Comment ai-je corriger?

+3

Il serait probablement plus facile d'obtenir la position de départ * * et la position de fin * * avec 'strpos' puis obtenir juste la partie entre ces positions avec 'substr'. – Gumbo

Répondre

17

Un motif preg a besoin d'une paire de caractères qui délimitent le motif lui-même. Ici, votre motif est inclus dans la première paire de parenthèses et tout le reste est à l'extérieur.

Essayez ceci:

$body=preg_replace("/(.*)<!-- start -->(.*)<!-- end -->(.*)/","$2",$body); 

Ceci est juste sur la syntaxe, aucune garantie sur le modèle lui-même qui semble suspect.

EDIT:

en supposant que le texte dans votre exemple:

preg_match('#<!-- start -->(.*?)<!-- end -->#s', $text, $match); 
$inner_text = trim($match[1]); 
+0

en remplaçant "" par "$ 2" résout le problème. J'ai encore une question, en utilisant $ 2 cela affectera-t-il n'importe quel autre domaine? – Vinith

3

Essayez ceci:

$body = preg_replace("/(.*)<!-- start -->(.*)<!-- end -->(.*)/","$2",$body);