2010-06-29 18 views
15

Sto cercando parole chiave in una stringa tramite un'espressione regolare. Funziona bene per tutte le parole chiave, eccetto una che contiene una barra in avanti: "time/emit".espressione regolare e barra diretta

Anche usando preg_quote($find,'/'), che sfugge, ho ancora ottenere il messaggio:

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

se stampo il modello ritrovamento, mostra /time\\/emit/. Senza preg_quote, mostra /time/emit/ ed entrambi restituiscono lo stesso messaggio di errore.

Qualsiasi bit di conoscenza sarebbe utile.

risposta

31

Cercate di iniziare e terminare la vostra espressione regolare con segno diverso rispetto a/

io personalmente uso `

Ho visto persone usando #

Penso che la maggior parte dei caratteri sono buone. Si può leggere di più su di esso qui: http://pl.php.net/manual/en/regexp.reference.delimiters.php

Ti piace questa:

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

Per dirla in altro modo: La variabile $find dovrebbe contenere piuttosto # tempo/emettono # di/tempo/emettere/

+0

il segno di spunta di nuovo ha fatto il trucco! – pixeline

+0

Soluzione elegante che ha risolto tutti i miei mal di testa con il carattere slash. – Seth

0

bit di codice?

il "regex" per quel particolare termine dovrebbe assomigliare a "/ time/emit /". Con una serie di parole chiave potrebbe esserci un metodo più efficiente, quindi vedere quello che stai facendo sarebbe positivo.

2

sembra che tu abbia qualcosa di già scampo ..

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

come un hack si può semplicemente fare:

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

questo dovrebbe funzionare:

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