php[world] 2018 - Call for Speakers

preg_quote

(PHP 4, PHP 5)

preg_quoteInserisce il carattere di escape nei caratteri delle espressioni regolari

Descrizione

string preg_quote ( string $stringa [, string $delimitatori ] )

La funzione preg_quote() inserisce il carattere di escape (\) davanti ad ogni carattere presente in stringa che sia parte della sintassi di una espressione regolare. Questa funzione è utile nei casi in cui si generino, durante l'esecuzione, delle stringhe da usare come criteri di riconoscimento, e queste possano contenere dei caratteri speciali per le espressioni regolari.

Se viene specificato un carattere come parametro delimitatore, anche a questo sarà anteposto il carattere di escape (\). Ciò è particolarmente utile per porre il carattere di escape nei delimitatori richiesti dalle funzioni PCRE. Il carattere di delimitazione più comunemente utilizzato è /.

I caratteri speciali per le espressioni regolari sono: . \\ + * ? [ ^ ] $ ( ) { } = ! < > | :

Example #1 Esempio di preg_quote()

<?php
$keywords 
"$40 for a g3/400";
$keywords preg_quote($keywords"/");
echo 
$keywords// returns \$40 for a g3\/400
?>

Example #2 Esempio di come rendere in corsivo una qualsiasi parola di un testo

<?php
// In questo esempio, la funzione preg_quote($word) viene usata
// per impedire agli asterischi di avere il loro significato
// speciale per le espressioni regolari.

$testo "Questo libro è *molto* difficile da trovare.";
$parola "*molto*";
$testo preg_replace("/"preg_quote($parola) . "/",
                          
"<i>" $parola "</i>",
                          
$testo);
?>

Nota: Questa funzione è binary-safe (gestisce correttamente i file binari)

add a note add a note

User Contributed Notes 3 notes

up
46
Anonymous
10 years ago
Wondering why your preg_replace fails, even if you have used preg_quote?

Try adding the delimiter / - preg_quote($string, '/');
up
2
rwillmann at crooce dot com
9 months ago
List of specials is incomplete:

--- sample code ---

$specials = '.\+*?[^]$(){}=!<>|:-';

for ($i = 0; $i <= 255; $i++) {

    if (chr($i) !== preg_quote(chr($i))) {

        printf("Character 0x%02x quoted%s\n",
               $i,
               (strpos($specials, chr($i)) === FALSE) ? ' (+)' : '');
    } /* if */
} /* for */

--- sample code ---

--- output ---

Character 0x00 quoted (+)
Character 0x21 quoted
Character 0x24 quoted
Character 0x28 quoted
Character 0x29 quoted
Character 0x2a quoted
Character 0x2b quoted
Character 0x2d quoted
Character 0x2e quoted
Character 0x3a quoted
Character 0x3c quoted
Character 0x3d quoted
Character 0x3e quoted
Character 0x3f quoted
Character 0x5b quoted
Character 0x5c quoted
Character 0x5d quoted
Character 0x5e quoted
Character 0x7b quoted
Character 0x7c quoted
Character 0x7d quoted

--- output ---
up
8
zooly
8 years ago
To escape characters with special meaning, like: .-[]() and so on, use \Q and \E.

For example:

<?php echo ( preg_match('/^'.( $myvar = 'te.t' ).'$/i', 'test') ? 'match' : 'nomatch' ); ?>

Will result in: match

But:

<?php echo ( preg_match('/^\Q'.( $myvar = 'te.t' ).'\E$/i', 'test') ? 'match' : 'nomatch' ); ?>

Will result in: nomatch
To Top