2010-12-10 7 views
2

Juste je remplace la balise d'objet dans la chaîne donnéePHP: ne pouvait pas remplacer l'aide preg_replace()

$matches = preg_replace("/<object(.+?)</object>/","replacing string",$str); 

mais il montre l'erreur comme

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

Qu'est-ce qui a mal tourné?

Répondre

1

La barre oblique dans </object> doit être citée: <\/object>, sinon elle est interprétée comme la fin de votre expression régulière puisque vous la délimitez avec des barres obliques. La ligne entière devrait être:

$matches = preg_replace("/<object(.+?)<\\/object>/","replacing string",$str); 
+0

@ACBalaji N'oubliez pas d'accepter cette réponse lorsque vous le pouvez. – alex

0

Dans votre expression régulière, la barre oblique est le délimiteur d'expression régulière. Comme vous traitez avec des étiquettes, mieux utiliser un autre séparateur (au lieu d'échapper avec une barre oblique inverse):

$matches = preg_replace("#<object(.+?)</object>#", "replacing string", $str); 

Il y a d'autres delimiteres aussi. Vous pouvez utiliser n'importe quel caractère non alphanumérique, non antislash et non blanc. Cependant, certains délimiteurs ne doivent en aucun cas être utilisés: |, +, * et les parenthèses/parenthèses par exemple car ils sont souvent utilisés dans les expressions régulières et ne feraient que troubler les gens et les inciter à vous détester. Btw, en utilisant des expressions régulières pour HTML est Bad Thing!

0

Le premier caractère est considéré comme délimiteur char pour séparer l'expression des indicateurs. Ainsi ceci:

"/[a-z]+/i" 

... est divisé en interne ceci:

- Pattern: [a-z]+ 
- Flags: i 

donc ceci:

"/<object(.+?)</object>/" 

... est pas un regexp valide. Essayez ceci:

"@<object(.+?)</object>@"