Modificatori di Pattern Possibili modificatori nei pattern regex I possibili modificatori PCRE attualmente disponibili sono elencati di seguito. I nomi tra parentesi si riferiscono ai nomi interni PCRE per questi modificatori. Spazi e nuove righe sono ignorati nei modificatori, altri caratteri causano errore.
i (PCRE_CASELESS) Se questo modificatore è impostato, le lettere nel pattern corrispondono sia a lettere maiuscole sia minuscole. m (PCRE_MULTILINE) Per impostazione predefinita, PCRE tratta la stringa soggetto come composta da una singola "riga" di caratteri (anche se in realtà contiene diverse nuove righe). Il metacarattere "inizio riga" (^) corrisponde solo all’inizio della stringa, mentre il metacarattere "fine riga" ($) corrisponde solo alla fine della stringa, oppure prima di una nuova riga finale (a meno che il modificatore D non sia impostato). Questo è lo stesso comportamento di Perl. Quando questo modificatore è impostato, i costrutti "inizio riga" e "fine riga" corrispondono rispettivamente subito dopo o subito prima di qualsiasi nuova riga nella stringa soggetto, oltre che all’inizio e alla fine assoluti. Questo è equivalente al modificatore /m di Perl. Se non ci sono caratteri "\n" in una stringa soggetto, oppure non ci sono occorrenze di ^ o $ in un pattern, l’impostazione di questo modificatore non ha effetto. s (PCRE_DOTALL) Se questo modificatore è impostato, un metacarattere punto nel pattern corrisponde a tutti i caratteri, incluse le nuove righe. Senza di esso, le nuove righe sono escluse. Questo modificatore è equivalente al modificatore /s di Perl. Una classe negativa come [^a] corrisponde sempre a un carattere di nuova riga, indipendentemente dall’impostazione di questo modificatore. x (PCRE_EXTENDED) Se questo modificatore è impostato, i caratteri di spaziatura nel pattern sono completamente ignorati tranne quando preceduti da escape o all’interno di una classe di caratteri, e anche i caratteri tra un # non preceduto da escape fuori da una classe di caratteri e il carattere di nuova riga successivo, incluso, sono ignorati. Questo è equivalente al modificatore /x di Perl, e rende possibile includere commenti all’interno di pattern complessi. Si noti, tuttavia, che ciò si applica solo ai caratteri di dati. I caratteri di spaziatura non possono mai apparire all’interno di sequenze di caratteri speciali in un pattern, per esempio nella sequenza (?( che introduce un sotto-pattern condizionale. A (PCRE_ANCHORED) Se questo modificatore è impostato, il pattern è forzato a essere "ancorato", cioè è vincolato a corrispondere solo all’inizio della stringa che viene analizzata (la "stringa soggetto"). Questo effetto può anche essere ottenuto tramite costrutti appropriati nel pattern stesso, che è l’unico modo per farlo in Perl. D (PCRE_DOLLAR_ENDONLY) Se questo modificatore è impostato, un metacarattere dollaro nel pattern corrisponde solo alla fine della stringa soggetto. Senza questo modificatore, il dollaro corrisponde anche immediatamente prima del carattere finale se è una nuova riga (ma non prima di altre nuove righe). Questo modificatore è ignorato se il modificatore m è impostato. Non esiste un equivalente di questo modificatore in Perl. S Quando un pattern deve essere utilizzato più volte, vale la pena dedicare più tempo ad analizzarlo per velocizzare il tempo necessario alla corrispondenza. Se questo modificatore è impostato, allora viene eseguita questa analisi aggiuntiva. Attualmente, lo studio di un pattern è utile solo per pattern non ancorati che non hanno un singolo carattere iniziale fisso. A partire da PHP 7.3.0 questo flag non ha alcun effetto. U (PCRE_UNGREEDY) Questo modificatore inverte la "avidità" dei quantificatori in modo che non siano avidi per impostazione predefinita, ma diventino avidi se seguiti da ?. Non è compatibile con Perl. Può anche essere impostato con un modificatore interno nel pattern (?U) oppure con un punto interrogativo dopo un quantificatore (ad esempio .*?). Di solito non è possibile corrispondere a più di pcre.backtrack_limit caratteri in modalità non avida. X (PCRE_EXTRA) Questo modificatore attiva funzionalità aggiuntive di PCRE che sono incompatibili con Perl. Qualsiasi barra rovesciata in un pattern che è seguita da una lettera che non ha significato speciale provoca un errore, riservando così queste combinazioni per future estensioni. Per impostazione predefinita, come in Perl, una barra rovesciata seguita da una lettera senza significato speciale è trattata come letterale. Attualmente non esistono altre funzionalità controllate da questo modificatore. J (PCRE_INFO_JCHANGED) L’impostazione dell’opzione interna (?J) modifica l’opzione locale PCRE_DUPNAMES. Consente nomi duplicati per i sotto-pattern. A partire da PHP 7.2.0 J è supportata anche come modificatore. u (PCRE_UTF8) Questo modificatore attiva funzionalità aggiuntive di PCRE che sono incompatibili con Perl. Pattern e stringhe soggetto sono trattati come UTF-8. Un soggetto non valido farà sì che la funzione preg_* non trovi alcuna corrispondenza; un pattern non valido genererà un errore di livello E_WARNING. Sequenze UTF-8 di cinque e sei ottetti sono considerate non valide. n (PCRE_NO_AUTO_CAPTURE) Questo modificatore rende non catturanti i gruppi semplici (xyz). Solo i gruppi nominati come (?<name>xyz) sono catturanti. Questo influisce solo su quali gruppi sono catturanti, è comunque possibile utilizzare riferimenti numerati ai sotto-pattern, e l’array delle occorrenze conterrà comunque risultati numerati. Disponibile a partire da PHP 8.2.0. r (PCRE2_EXTRA_CASELESS_RESTRICT) Quando u (PCRE_UTF8) e i (PCRE_CASELESS) sono attivi, questo modificatore impedisce la corrispondenza tra caratteri ASCII e non ASCII. Per esempio, preg_match('/\x{212A}/iu', "K") corrisponde al segno Kelvin (U+212A). Quando si utilizza r (preg_match('/\x{212A}/iur', "K")), non vi è corrispondenza. Disponibile a partire da PHP 8.4.0.