Esiste un'utilità che convertirà POSIX in PCRE per PHP? [duplicare]
Domanda
Questa domanda ha già una risposta qui:
Esiste un'utilità che convertirà POSIX in PCRE per PHP? Sono un po 'confuso dal manuale di PHP su PCRE, e mentre proverò a trovare maggiori informazioni su PCRE, mi chiedevo se qualcuno avesse progettato una tale utilità.
Oppure, se qualcuno spiegasse come convertire quanto segue, andrebbe anche bene:
ereg("^#[01-9A-F]{6}<*>quot;, $sColor)
Ma per favore spiega come è fatto, non ditemi solo la conversione.
Soluzione
preg_match("/^#[01-9A-F]{6}$/", $sColor)
In questo caso devi solo aggiungere i due delimitatori.
In perl puoi scrivere qualcosa come
if ( s =~ /x.+y/ )
{ print "match"; }
Come puoi vedere, l'espressione regolare effettiva è incapsulata in //. Se si desidera impostare un'opzione sull'espressione regolare, la si inserisce dopo la seconda /, ad es. commutando l'espressione su non gratificato di default /x.+y/U
pcre ora emula questo comportamento. Sebbene sia necessario chiamare una funzione, è necessario fornire anche i delimitatori e impostare le opzioni dopo il secondo delimitatore. In perl il delimitatore deve essere /, con pcre puoi scegliere più liberamente
preg_match("/^#[01-9A-F]{6}$/", $sColor)
preg_match("!^#[01-9A-F]{6}$!", $sColor)
preg_match("#^\#[01-9A-F]{6}$#", $sColor) // need to escape the # within the expression here
preg_match("^#[01-9A-F]{6}$
", $sColor)
lo stesso di pcre, meglio scegliere un carattere che non appare nell'espressione.
Altri suggerimenti
preg_match (" / ^ # [01-9A-F] {6} $ / D " ;, $ sColor)
Nota il D
. Le persone se ne dimenticano continuamente. Senza di essa $
consentirà un carattere di nuova riga finale. Una stringa come " # 000000 \ n " passerebbe. Questa è una sottile differenza tra POSIX e PCRE.
E, naturalmente, [01-9]
può essere riscritto in [0-9]
.
A proposito, PHP supporta sia espressioni regolari PCRE che POSIX. Ecco la sezione del manuale di PHP sulle espressioni regolari POSIX, quindi non è necessario convertirle: http://www.php.net/manual/en/book.regex.php