2010-06-29 5 views
15

Je recherche des mots-clés dans une chaîne via une expression régulière. Cela fonctionne bien pour tous les mots-clés, sauf celui qui contient une barre oblique: "time/emit".expression régulière et barre oblique

Même en utilisant preg_quote($find,'/'), qui lui échappe, je reçois toujours le message:

Unknown modifier 't' in /frontend.functions.php on line 71 

Si j'imprimer le motif de découverte, il montre /time\\/emit/. Sans preg_quote, il affiche /time/emit/ et les deux retournent le même message d'erreur.

Un peu de connaissance serait utile.

Répondre

31

Essayez de commencer et terminer votre expression régulière avec le signe différent de celui/

j'utilise `

J'ai vu des gens en utilisant #

Je pense que la plupart des caractères sont bons. Vous pouvez en lire davantage ici: http://pl.php.net/manual/en/regexp.reference.delimiters.php

Comme ceci:

preg_match('#time/emit#', $subject); // instead of /time/emit/ 

Pour d'autres termes: la variable $find doit contenir assez # temps/émette # que/temps/émettre/

+0

la tique arrière a fait l'affaire! – pixeline

+0

Solution élégante qui a résolu tous mes maux de tête avec le caractère de barre oblique. – Seth

0

peu de code?

le 'regex' pour ce terme particulier devrait ressembler à '/ time/emit /'. Avec un ensemble de mots-clés, il peut y avoir une méthode plus efficace, alors voir ce que vous faites serait bien.

2

semble que vous avez déjà quelque chose échapper ..

preg_quote('time/emit') // returns time\/emit 
preg_quote('time\/emit') // returns time\\/emit 

comme un hack vous pouvez simplement faire:

preg_quote(stripslashes($find)) // will return time\/emit 
0

cela devrait fonctionner:

$a="Hello////////"; 
$b=str_replace($a,"//","/"); 
echo $b; 
Questions connexes