LA CAMPANA

C’è chi ha letto questa notizia prima di te.
Iscriviti per ricevere nuovi articoli.
E-mail
Nome
Cognome
Come vuoi leggere La Campana?
Niente spam

PHP regexp è un potente algoritmo di corrispondenza dei modelli che può essere eseguito in una singola espressione. Le espressioni regolari PHP utilizzano operatori aritmetici (come +, -, ^) per creare espressioni complesse.

A cosa servono le espressioni regolari:

  • Le espressioni regolari semplificano l'identificazione dei dati di stringa chiamando una singola funzione. Ciò consente di risparmiare tempo durante la scrittura del codice;
  • Durante la convalida dei dati immessi dall'utente come indirizzo e-mail, dominio del sito Web, numero di telefono, indirizzo IP;
  • Evidenziare le parole chiave nei risultati di ricerca;
  • Le espressioni regolari possono essere utilizzate per identificare i tag e sostituirli.

Espressioni regolari in PHP

PHP contiene funzioni integrate che ti consentono di lavorare con le espressioni regolari. Ora diamo un'occhiata alle funzioni delle espressioni regolari PHP comunemente utilizzate.

  • preg_match - Utilizzato per eseguire la corrispondenza del modello di stringa. Restituisce vero se viene trovata una corrispondenza e falso se non viene trovata alcuna corrispondenza;
  • preg_split - utilizzato per dividere una stringa secondo uno schema, il risultato viene restituito come array numerico;
  • preg_replace – utilizzato per cercare un modello e sostituirlo con una stringa specificata.

Di seguito è riportata la sintassi delle funzioni delle espressioni regolari come preg_match, preg_split o PHP regexp replace:

"nome_funzione" è preg_match, preg_split o preg_replace.
“/…/” - le barre indicano l'inizio e la fine di un'espressione regolare.
“‘/pattern/"” è il pattern che dobbiamo far corrispondere.
"oggetto" è la stringa con cui confrontare il modello.

Vediamo ora degli esempi pratici di utilizzo delle funzioni sopra menzionate.

Preg_match

Il primo esempio utilizza la funzione preg_match per eseguire un semplice pattern match per la parola guru in un dato URL.

Il codice seguente mostra un'implementazione di questo esempio:


Diamo un'occhiata alla parte del codice responsabile dell'output "preg_match('/guru/', $mio_url)".

“preg_match(…)” è la funzione regexp di corrispondenza PHP.
“‘/Guru/"” è un modello di espressione regolare.
"$My_url" è una variabile contenente il testo con cui confrontare il modello.

Preg_split

Diamo un'occhiata a un altro esempio che utilizza la funzione preg_split.

Prenderemo una frase e la divideremo in un array; il modello è progettato per corrispondere a un singolo spazio:

Preg_sostituisci

Considera la funzione preg_replace, che esegue un pattern match e sostituisce il risultato corrispondente con un'altra stringa.

Il codice seguente cerca la parola guru in una stringa. Lo sostituisce con il codice CSS che imposta il colore di sfondo:

Guru", $testo); echo $testo; ?>

Metacaratteri

Gli esempi precedenti utilizzavano modelli semplici. I metacaratteri consentono una corrispondenza di pattern regexp PHP più complessa, come la convalida dell'indirizzo e-mail. Diamo un'occhiata ai metacaratteri comunemente usati.

Metacarattere Descrizione Esempio
. Corrisponde a qualsiasi singolo carattere diverso da un carattere di nuova riga. /./ - tutto ciò che contiene un carattere.
^ Contrassegna l'inizio di una riga, escluso il carattere /. /^PH/ è qualsiasi stringa che inizia con PH.
$ Indica un motivo alla fine di una linea. /com$/ - guru99.com, yahoo.com, ecc.
* Indica un numero qualsiasi di caratteri, zero o più. /com*/ - computer, comunicazione, ecc.
+ Richiede che i caratteri appaiano prima del metacarattere almeno una volta. /yah+oo/ - yahoo.
Simbolo di fuga. /yahoo+.com/ - prende il punto con un significato letterale.
[…] Classe di caratteri. // - abc.
az Indica le lettere minuscole. /a-z/ - bello, felice, ecc.
A-Z Indica le lettere maiuscole. /A-Z/ - COSA, COME, PERCHÉ, ecc.
0-9 Rappresenta qualsiasi numero da 0 a 9. /0-4/ — 0,1,2,3,4.

Ora diamo un'occhiata a un complesso esempio di regexp PHP che verifica la validità di un indirizzo email:

Risultato: indirizzo email [e-mail protetta]è valido.

Spiegazione del pattern “+@+.(2.5)$/] “

“‘/…/"” inizia e termina l’espressione regolare.
"^" corrisponde a qualsiasi lettera maiuscola o minuscola, numeri da 0 a 9 e punti, trattini bassi o trattini.
"+@" corrisponde al simbolo @ seguito da lettere minuscole o maiuscole, numeri da 0 a 9 o trattini.
"+.(2,5)$/" specifica un punto utilizzando una barra rovesciata, seguita da eventuali lettere minuscole o maiuscole, il numero di caratteri alla fine della riga deve essere compreso tra 2 e 5.

Le espressioni regolari sono uno strumento molto utile per gli sviluppatori. Le espressioni regolari ti consentono di controllare, cercare e modificare la correttezza del testo.
Questo articolo contiene alcune espressioni molto utili con cui spesso devi lavorare.

Introduzione alle espressioni regolari

Quando vengono introdotte per la prima volta alle espressioni regolari, possono sembrare difficili da comprendere e utilizzare. In realtà, tutto è più semplice di quanto sembri. Prima di considerare esempi complessi, diamo un'occhiata alle nozioni di base:

Funzioni per lavorare con le espressioni regolari in PHP

Verifica del dominio

Verifica del nome di dominio corretto.

$url = "http://esempio.com/"; if (preg_match("/^(http|https|ftp)://(*(?:.*)+):?(d+)?/?/i", $url)) ( echo "Ok."; ) else ( echo "URL sbagliato."; )

Evidenziare le parole nel testo

Un'espressione regolare molto utile per . Utile per la ricerca.

$text = "Frase di esempio, regex è diventata popolare nella programmazione web. Ora impariamo regex. Secondo Wikipedia, le espressioni regolari (abbreviate come regex o regexp, con le forme plurali regex, regexp o regexen) sono scritte in un linguaggio formale che può essere interpretato da un processore di espressioni regolari"; $testo = preg_replace("/b(regex)b/i", " 1", $testo); echo $testo;

Risultati della ricerca evidenziati in WordPress

Come già accennato, l'esempio precedente è molto utile per i file . Applichiamolo a WordPress. Apri il file ricerca.php, trova la funzione il_titolo(). Sostituirlo con quanto segue:

Echo $titolo;

Ora, prima di questa riga, inserisci il codice:

\0", $titolo); ?>

Apri il file style.css. Aggiungi la riga:

Estratto.search-strong ( sfondo: giallo; )

Ottieni tutte le immagini da un documento HTML

Se mai avessi bisogno di trovare tutte le immagini in una pagina HTML, il seguente codice ti tornerà utile. Con esso, puoi facilmente creare un caricatore di immagini utilizzando .

$immagini = array(); preg_match_all("/(img|src)=("|")[^"">]+/i", $dati, $media); non impostato($dati); $data=preg_replace("/(img|src)("|"|="|=")(.*)/i","$3",$media); foreach($data as $url) ( $info = pathinfo($url); if (isset($info["extension"])) ( if (($info["extension"] == "jpg") || ($info["estensione"] == "jpeg") || ($info["estensione"] == "gif") || ($info["estensione"] == "png")) array_push($ immagini, $url);

Rimozione di parole duplicate (indipendentemente dalle maiuscole e minuscole)

$testo = preg_replace("/s(w+s)1/i", "$1", $testo);

Rimozione dei segni di punteggiatura duplicati

Simile al precedente, ma rimuove i segni di punteggiatura.

$testo = preg_replace("/.+/i", ".", $testo);

Trovare un tag XML/HTML

Una semplice funzione che accetta due argomenti: il tag da trovare e una stringa contenente XML o HTML.

Funzione get_tag($tag, $xml) ( $tag = preg_quote($tag); preg_match_all("(<".$tag."[^>]*>(.*?).")", $xml, $matches, PREG_PATTERN_ORDER);

Trovare un tag XML/HTML con un valore di attributo specifico

La funzione è simile alla precedente, ma diventa possibile specificare un attributo tag. Per esempio:

.

Funzione get_tag($attr, $valore, $xml, $tag=null) ( if(is_null($tag)) $tag = "\w+"; else $tag = preg_quote($tag); $attr = preg_quote($ attr); $valore = preg_quote($valore); $tag_regex = "/<(".$tag.")[^>]*$attr\s*=\s*". "(["\"])$valore\\2[^>]*>(.*?)<\/\\1>/" preg_match_all($tag_regex, $xml, $matches, PREG_PATTERN_ORDER); return $matches; )

Trovare i codici colore esadecimali

La funzione consente di trovare o verificare la correttezza dei codici colore esadecimali.

$stringa = "#555555"; if (preg_match("/^#(?:(?:(3))(1,2))$/i", $string)) ( echo "esempio 6 riuscito."; )

Trovare il titolo della pagina

Questo codice troverà e visualizzerà il testo tra i tag </i> E <i> Pagine HTML.

$fp = fopen("http://www.catswhocode.com/blog","r"); while (!feof($fp))( $page .= fgets($fp, 4096); ) $titre = eregi(" (.*)",$pagina,$regs); echo $regs; fclose($fp);

Analisi dei log di Apache

Molti siti Web vengono eseguiti sul server Web Apache. Se il tuo sito funziona anche su un server taco, potrebbero essere utili le seguenti routine regolari.

//Log: server web Apache // Accessi riusciti ai file html. Utile per contare le impressioni sulla pagina. "^((?#IP client o nome dominio)S+)s+((?#autenticazione di base)S+s+S+)s+[((?#data e ora)[^]]+)]s+"(?: GET|POST|HEAD) ((?#file)/[^ ?]+?.html?)??((?#parametri)[^ ?]+)? HTTP/+"s+(?#codice stato)200s+((?#byte trasferiti)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent )[^"]*)"$" //Log: server web Apache //errori 404 "^((?#IP client o nome dominio)S+)s+((?#autenticazione di base)S+s+S+)s+ [((?#data e ora)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)[^ ?]+)??((?#parametri)[^ ? "]+)? HTTP/+"s+(?#codice stato)404s+((?#byte trasferiti)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent )[^"]*)"$")

Sostituzione delle virgolette doppie con virgolette inglesi

preg_replace("B"b([^"x84x93x94rn]+)b"B", "?1?", $testo);

Controllo della complessità della password

Questa espressione regolare controlla una stringa punto per punto: la stringa deve contenere almeno 6 lettere, numeri, trattini bassi e trattini. La riga deve contenere almeno una lettera maiuscola, una lettera minuscola e un numero.

"A(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?) [-_a-zA-Z0-9](6,)z"

WordPress: ottenere immagini di post utilizzando l'espressione regolare

Se usi WordPress, potresti trovare utile avere una funzionalità che otterrà tutte le immagini da un post e le visualizzerà. Per utilizzare questo codice, copialo nei file del tema.

post_contenuto; $szSearchPattern = "~ ]* />~"; // Esegui preg_match_all per catturare tutte le immagini e salvare i risultati in $aPics preg_match_all($szSearchPattern, $szPostContent, $aPics); // Controlla se abbiamo almeno 1 immagine $iNumberOfPics = count($aPics); if ($iNumberOfPics > 0) ( // Ora qui dovresti fare tutto ciò che devi fare con le immagini // Per questo esempio le immagini vengono visualizzate solo per ($i=0; $i< $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Conversione di emoticon in immagini

Questa funzionalità è disponibile anche in WordPress e ti consente di sostituire automaticamente le emoticon di testo con immagini.

$texte="Un testo con una faccina:-)"; echo str_replace(":-)"," ",$testo);

) Ti ho mostrato un esempio di utilizzo delle espressioni regolari per trovare parti specifiche del codice sorgente di una pagina. Ora impareremo come scriverli da soli. Questa abilità ti aiuterà a scrivere, a cancellare il testo da frammenti non necessari, a cercare le parti necessarie in grandi volumi di testo e così via.

Questo argomento è piuttosto complicato, ma cercherò di coprire brevemente i punti più importanti. Non so quanto successo avrò, ma spero che la lezione sia utile.
Quindi, iniziamo dal fatto che esistono diverse funzioni per lavorare con le espressioni regolari in PHP, ma tre sono quelle più spesso utilizzate:

  • preg_replace — cerca e sostituisce il testo che corrisponde a un'espressione regolare;
  • preg_match - solo una ricerca normale;
  • preg_split: cerca e divide il testo.

Almeno, nelle lezioni precedenti li abbiamo usati. Più precisamente al posto di preg_match c'era preg_match_all, ma sostanzialmente è la stessa cosa, solo che quest'ultimo non interrompe la ricerca dopo il primo risultato. Cioè, se usiamo preg_match, non troveremo tutte le occorrenze, ma solo la prima.

Scegliere quale funzione utilizzare in quale situazione è abbastanza semplice. Dobbiamo sostituire: usiamo sostituisci, come nel caso in cui avessimo bisogno di rimuovere parti non necessarie del codice della pagina, ricordi?

$pagina = preg_replace("/ ^]/i", "", $pagina); $pagina = preg_replace("/ ^]/i", "", $pagina); $pagina = str_replace("", "", $pagina);

Il primo parametro della funzione è un carattere regolare che determina cosa stiamo cercando. Il secondo è ciò con cui lo sostituiamo. Terzo: dove stiamo guardando? Pertanto, qui abbiamo preso la variabile $page e le abbiamo assegnato il risultato della funzione preg_replace in cui abbiamo cercato tutti gli input type=checkbox, nonché le etichette di apertura e chiusura. Li hanno sostituiti con ", cioè li hanno semplicemente cancellati. Spero che qui sia tutto chiaro. Passeremo all'analisi dell'espressione stessa (il primo parametro della funzione) un po' più tardi.
C'era anche un esempio di utilizzo di preg_match_all, utile per trovare tutti i collegamenti nel testo rimanente. Allora avevamo bisogno di collegamenti perché contenevano le parole chiave che stavamo analizzando. Ecco cosa è successo:

Preg_match_all("/ ]+?>(.*?)<\/a>/uis",$pagina,$ok); for ($j=0; $j ".$ok[$j].""; }

Il primo parametro è ancora una volta un'espressione regolare per trovare tutti i collegamenti che sono naturalmente racchiusi nel tag “a” (se non hai familiarità con il markup html, leggi). La seconda è una variabile che contiene il testo che verrà cercato. Il terzo parametro è una variabile in cui viene inserito il risultato: $ok. Dopodiché, non resta che esaminare tutti gli elementi necessari di $ok per ottenere le chiavi di cui abbiamo bisogno. Separatamente, va detto che in uscita otteniamo un array multidimensionale. Ecco perché l'abbiamo visualizzato in modo così complesso: $ok[$j]. Per visualizzare la struttura dell'array, usa la funzione qui sotto e capirai tutto.

Stampa_r($ok);

Sembra che abbiamo risolto le funzioni che abbiamo utilizzato per il nostro lavoro. Ora non resta che imparare a scrivere queste stesse espressioni regolari, che sono il primo parametro di ciascuno di questi metodi. Passiamo alla cosa più importante.

Come scrivere frasi regolari

Per prima cosa, diamo un'occhiata alle strutture di base. Le espressioni hanno opzioni. Sono specificati da una lettera e scritti alla fine, preceduti da una barra.

Inoltre, sono supportati i seguenti metacaratteri:

I metacaratteri, a loro volta, possono avere modificatori:

Bene, ora possiamo passare ad analizzare i nostri schemi regolari dell'ultima lezione. In base ai segnali sopra, proviamo a capire cosa abbiamo. Ecco l'espressione:

/^]/i

La prima e l'ultima barra "/" indicano che al loro interno è presente un'espressione regolare. Allo stesso tempo, dopo l'ultimo mettiamo "i", questa è un'opzione, come nella prima tabella - non prendere in considerazione il caso. All'interno delle barre c'è la sequenza regolare stessa. Inizia con il segno meno di e il tag di input, e tutto ciò che viene dopo fino al segno del punto è solo testo semplice da cercare. Ma il punto stesso e i simboli che lo seguono sono più interessanti. In questo caso, la costruzione “.*?” indica qualsiasi sequenza di caratteri. Cioè, se combiniamo solo il testo e questa costruzione, selezioneremo tutto il testo dopo la prima occorrenza e fino alla fine. Per fermarti, devi incontrare un tag HTML di chiusura "più di" o un carattere di nuova riga. Questo design ci offre proprio questa opportunità:

I caratteri tra parentesi quadre sono collegati da un OR logico. La fine è il segno maggiore di OPPURE l'inizio della riga.
Questa è tutta l'espressione, in essa impostiamo la condizione iniziale, quella intermedia e quella finale. Non è difficile, vero? Ecco un'illustrazione per chiarezza:

Diamo un'occhiata a un'altra cosa per consolidare il tutto. Abbiamo cercato collegamenti con loro:

/]+?>(.*?)<\/a>/uis

Leggiamo l'espressione. Ancora una volta, scartiamo prima le barre e le opzioni. I flag "uis" sono autoesplicativi, ad eccezione di "u", che non ho descritto: mostra che stiamo utilizzando la codifica Unicode. Non è rimasto molto. L'inizio è il tag "a", che si apre, poi arriva la classe

che significa NON maggiore o minore di (apertura e chiusura dei tag HTML), ovvero qualsiasi carattere in questo caso. “+?” viene aggiunto alla classe, il che significa che questa classe sarà presente 1 o più volte (ma almeno 1 volta di sicuro). E poi arriva il tag html di chiusura per il tag “a”. All'interno del collegamento è presente del testo specificato dal gruppo

Dopotutto, non sappiamo che tipo di testo ci sarà, quindi definiamo un gruppo del genere. E alla fine c'è un tag di chiusura “a”:

Tieni presente che eliminiamo la barra utilizzando una barra rovesciata in modo che venga percepita come testo semplice.

Uff. L'argomento è davvero piuttosto complesso, richiede pratica. Forse sto facendo qualcosa che non è del tutto ottimale ed è possibile creare altre espressioni regolari più corrette, ma sono autodidatta come te, quindi non giudicare rigorosamente, ma piuttosto condividi le tue opzioni nei commenti. Inoltre, se qualcosa non ti è chiaro, la pagina dei commenti e dei contatti è al tuo servizio.

1,7K

Espressioni regolari (abbreviato come regex) sono sequenze di caratteri che formano modelli di ricerca. Vengono utilizzati principalmente nei modelli di corrispondenza delle stringhe.

Breve storia

  • Tutto ebbe inizio tra gli anni Quaranta e Sessanta, quando molte persone intelligenti parlavano di espressioni regolari;
  • anni '70 g/r/p;
  • 1980 Perl e Henry Spencer;
  • 1997 PCRE (espressioni regolari compatibili con Perl). Questo è quando è iniziata l’ascesa di quelle che chiamiamo espressioni regolari. PCRE fornisce librerie per quasi tutte le lingue.

Uso generale delle espressioni regolari in PHP

PHP include tre funzioni principali per lavorare con PCRE: preg_match, preg_match_all e preg_replace.

Confronto di conformità

L'espressione restituisce 1 se viene stabilita una corrispondenza, 0 in caso contrario e false se si verifica un errore:

int preg_match (string $modello, string $oggetto [, array &$matches [, int $flags = 0 [, int $offset = 0]]])

Un esempio di espressione regolare che restituisce il numero di corrispondenze trovate:

int preg_match_all (string $modello, string $oggetto [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0]]])

Sostituzione

L'espressione restituisce la stringa o l'array sostituito ( basato su $oggetto):

preg_replace misto ($modello misto, $sostituzione mista, $oggetto misto [, int $limit = -1 [, int $count]])

Uso generale delle espressioni regolari in JavaScript

Le espressioni regolari in JavaScript sembrano quasi le stesse di PHP.

Confronto di conformità

Restituisce un array di corrispondenze o null se non viene trovata alcuna corrispondenza:

string.match(RegExp);

Sostituzione

Un'espressione regolare che restituisce una stringa con le sostituzioni effettuate:

string.replace(RegExp, sostituzione);

Funzionalità delle espressioni regolari in JavaScript

  • Un punto non corrisponde mai a una nuova riga:
  • Stessi metodi per confrontare corrispondenza e sostituzione tramite espressione regolare come senza di essi.

Principi di composizione di pattern di espressione regolare

Diamo un'occhiata a un esempio in cui dobbiamo trovare indirizzi email in una codebase. Il nostro obiettivo:

Prese analogiche

Le espressioni regolari sono costituite da due tipi di caratteri:

  • caratteri speciali: ? * + () () ^ $ / .
  • Letterali.

Pensa alle stringhe di input come a bulloni e al modello come a un insieme di connettori per esse (nell'ordine appropriato).

Caratteri speciali

Quando testi le espressioni regolari, devi sapere come funzionano i caratteri speciali:

  • Il carattere barra rovesciata \ può sostituire un altro carattere speciale in un'espressione regolare:
  • Punto e w - .

Corrisponde a tutti i caratteri tranne i ritorni a capo. Se vuoi verificare la conformità con un punto, e solo un punto - , la conformità con lettere, numeri e trattini bassi - w

  • Parentesi quadre.

Abbina i caratteri tra parentesi. Supporta intervalli. Alcuni esempi:
o - corrisponde a qualsiasi a, b o c.
o lettere maiuscole.
o qualsiasi numero.
o - Corrisponde a qualsiasi carattere alfabetico minuscolo o maiuscolo.
Opzionale? Corrispondenza 0 o 1.
Asterisco *.

Un asterisco indica 0 o più caratteri.

Abbina 1 o più personaggi.

Parentesi graffe ().

Valori minimi e massimi. Alcuni esempi di sintassi delle espressioni regolari:
o (1,) non inferiore a 1.
o (1,3) da 1 a 3.
o (1,64) da 1 a 64.

Aggiungiamo tutto questo per ottenere un'espressione regolare per gli indirizzi email:

/+@+(.+)*/i


Ecco come appare in PHP:

preg_match_all("/+@+(.+)*/i", $input_lines, $output_array);

Utilizzo delle espressioni regolari per la convalida

La sfida: garantire che i dati di input siano quelli previsti. Obiettivo 1: /[^w$.]/ Obiettivo 2: /^(1,2)$/

Le espressioni regolari vanno bene per trovare elementi, ma devi sapere esattamente cosa stai cercando.

Quando non dovresti utilizzare un'espressione regolare per la convalida?

Molti casi vengono gestiti meglio utilizzando la funzione PHP filter_var. Ad esempio, la convalida dell'indirizzo email dovrebbe essere eseguita utilizzando i filtri integrati di PHP:

filter_var(" [e-mail protetta]", FILTER_VALIDATE_EMAIL)

Convalida utilizzando espressioni regolari

Le espressioni regolari alla fine di una riga utilizzano le ancore:

^ - indica l'inizio di una riga.
$ è il simbolo del dollaro che indica la fine di una linea.

if (!preg_match("%^(1,2)$%", $_POST["subscription_frequency"])) ( $isError = true; )

Classi di personaggi escluse

[^abc] - tutto tranne a, b o c, compresi i ritorni a capo.

Un esempio che consente di inserire solo caratteri alfanumerici, trattini, punti e trattini bassi:

if (preg_match("/[^0-9a-z-_.]/i", $productCode)) ( $isError = true; )

Cerca e sostituisci

Le funzioni PCRE più comuni per eseguire la ricerca e la sostituzione sono preg_replace() e preg_replace_callback() . Ma ci sono anche preg_filter() e preg_replace_callback_array() che fanno quasi la stessa cosa. Tieni presente che la funzione preg_replace_callback_array() è disponibile a partire da PHP7.

Sostituisci le parole in un elenco

$oggetto = "Voglio mangiare delle mele."; echo preg_replace("/mela|banana|arancia/", "frutta", $oggetto);

Risultato

Voglio mangiare un po' di frutta.

Se un'espressione regolare ha sottomodelli ( tra parentesi), puoi sostituire $N o N (dove N è un numero intero >= 1), questo è chiamato "backlink".

Riordinare due numeri

$oggetto = "7/11"; echo preg_replace("/(d+)/(d+)/", "$2/$1", $oggetto);

Risultato

Modifica la formattazione della data

$oggetto = "2001-09-11"; echo preg_replace("/(d+)-(d+)-(d+)/", "$3/$2/$1", $oggetto);

Risultato

Un semplice esempio di sostituzione di un URL in un tag

$subject = "Visita https://php.earth/doc per ulteriori articoli."; echo preg_replace("#(https?://([^s./]+(?:.[^s./]+)*[^s]*))#i", "$2", $oggetto) ;

Risultato

Per ulteriori articoli, visitare php.earth/doc.

A volte è necessario eseguire operazioni di ricerca e sostituzione complesse, ad esempio quando si filtra/controlla prima di sostituire. Preg_replace_callback() può tornare utile in questa situazione.

L'uso più comune delle espressioni regolari in Perl è negli operatori di ricerca e sostituzione come S//, M/, operatori connettivi =~ O != ecc. Di norma, tutti questi operatori hanno opzioni simili come:

In genere tutte queste opzioni sono indicate come "/x". Possono anche essere utilizzati all'interno di modelli utilizzando la nuova costruzione (?...)

Le espressioni regolari o i modelli sono gli stessi delle procedure regexp in Unix. Le espressioni e la sintassi sono prese in prestito dalle procedure V8 distribuite gratuitamente da Henry Spencer, dove sono descritte in dettaglio.

I modelli utilizzano i seguenti metacaratteri (caratteri che denotano gruppi di altri caratteri) spesso chiamati standard egrep:

I metacaratteri hanno dei modificatori (scritti dopo il metacarattere):

In tutti gli altri casi, le parentesi graffe sono considerate caratteri ordinari (regolari). Quindi "*" è equivalente a (0,) , "+" è (1,) e "?" - (0,1). n e m non possono essere maggiori di 65536.

Per impostazione predefinita, i metacaratteri sono avidi. La corrispondenza viene propagata quante più volte possibile, senza considerare l'effetto dei metacaratteri successivi. Se vuoi "ridurre il loro appetito", usa il simbolo "?". Ciò non cambia il significato dei metacaratteri, ne riduce solo la propagazione. Così:

I caratteri jolly funzionano allo stesso modo delle virgolette doppie, quindi puoi utilizzare i caratteri `\` - (caratteri barra rovesciata):

\T - carattere di tabulazione
\N -nuova linea
\R - trasferimento in carrozza
\UN - traduzione del formato
\v - tabulazione verticale
\UN - chiamata
\e - fuga
\033 - Notazione dei simboli ottali
\x1A - esadecimale
\C[ - simbolo di controllo
\l - carattere successivo minuscolo
\ u - maiuscolo -//-
\L - tutti i caratteri sono minuscoli fino a \E
\U - in alto -//-
\E - limitatore di modifica del registro
\Q - annulla l'azione come metacarattere

Inoltre, sono stati aggiunti a Perl i seguenti metacaratteri:

Nota che questo è tutto "un" carattere. Utilizza i modificatori per indicare la sequenza. COSÌ:

Inoltre, ci sono metacaratteri immaginari. Indica simboli inesistenti nel punto in cui il valore cambia. Ad esempio:

Il confine di una parola (\b) è un punto immaginario tra i caratteri \w e \W. All'interno di una classe di caratteri, "\b" rappresenta il carattere backspace. Metacaratteri \UN E \Z- sono simili a "^" e "$", ma se l'inizio della riga "^" e la fine della riga "$" agiscono per ogni riga in una stringa su più righe, allora \UN E \Z indicare l'inizio e la fine di un'intera stringa multilinea.

Se all'interno del modello viene utilizzato il raggruppamento (parentesi), il numero della sottostringa del gruppo viene designato come "\digit". Tieni presente che seguendo uno schema all'interno di un'espressione o di un blocco, questi gruppi sono indicati come "$cifra". Inoltre, ci sono ulteriori variabili:

Esempio:

$s = "Uno 1 due 2 e tre 3";

if ($s =~ /(\d+)\D+(\d+)/) ( print "$1\n"; # Risultato "1" print "$2\n"; # "2" print "$+\n" ; # "2" print "$&\n"; # "1 due 2" print "$`\n" # "Uno " print "$"\n"; # " e tre 3";

Esempio:

Perl versione 5 contiene costrutti di template aggiuntivi:

$s = "1+2-3*4"; if ($s =~ /(\d)(?=-)/) # Trova il numero seguito da "-" ( print "$1\n"; # Risultato "2" ) else ( print "errore di ricerca\n" )

Esempio:

(?!modello) - "guardare" avanti per negazione:

$s = "1+2-3*4"; if ($s =~ /(\d)(?!\+)/) # Trova una cifra che non sia seguita da "+" ( print "$1\n"; # Risultato "2") else ( print "cerca errore\ n"; )

(?ismx) - modificatori “interni”. È comodo da utilizzare nei modelli, dove, ad esempio, è necessario specificare un modificatore all'interno del modello.

  1. Regole delle espressioni regolari. (espressione regolare)
  2. Qualsiasi personaggio rappresenta se stesso a meno che non sia un metacarattere. Se devi annullare l'effetto di un metacarattere, metti "\" davanti ad esso.
  3. La stringa di caratteri denota una stringa di questi caratteri.
  4. L'insieme dei possibili caratteri (classe) è racchiuso tra parentesi quadre "", ciò significa che uno dei caratteri specificati tra parentesi può comparire in questo posto. Se il primo carattere tra parentesi è "^", nessuno dei caratteri specificati può comparire in questo punto dell'espressione. All'interno di una classe è possibile utilizzare il simbolo "-" per denotare un intervallo di caratteri. Ad esempio, a-z è una delle lettere minuscole dell'alfabeto latino, 0-9 è un numero, ecc.

LA CAMPANA

C’è chi ha letto questa notizia prima di te.
Iscriviti per ricevere nuovi articoli.
E-mail
Nome
Cognome
Come vuoi leggere La Campana?
Niente spam