Giusto una spiegazione per chiarire perché le PCRE (PERL COMPATIBLE REGULAR EXPRESSION) sono cosi veloci e soprattutto perché sono da usare al posto di altre soluzioni.

Come prima cosa, come potete vedere voi stessi, con una sola riga di codice (la stringa del pattern poteva essere inglobata nel codice), escludiamo il return che è presente in entrambi i sistemi, si effettua l'operazione a differenza del sistema che ha scritto Virus_101, anche se comunque ci potrebberò essere situazioni particolari dove va a fare cilecca che si potrebberò facilmente evitare con una regexp, utilizza 5 righe di codice. Cosa vuol dire?

Più codice = maggiore complessità = minore gestibilità

Inoltre più codice aumenta il tempo di caricamento della pagina ... certo non sono 4 righe che fanno differenza ma in un sistema più complesso 4 righe li, 10 la, 100 dall'altra parte si sommano ad ogni esecuzione e poi presentano il conto quando la macchina tira le cuoia perché troppo carica.

Il motivo, semplice, per il quale la regexp è infinitamente più veloce, pur essendo cosi complessa è semplice: il pattern !href=\"(.*)\"!Ue viene preso dalla libreria PCRE è trasformato in codice macchina caricato in memoria che viene poi richiamato ad ogni esecuzione dello stesso pattern. Ovviamente questo è più veloce perché non passa per PHP, a differenza del FOR, e soprattutto è codice C compilato ed ottimizzato a differenza del codice PHP che comunque è interpretato anche se byteencodato in memoria (magari usando qualcosa come phalanger ci sarebberò delle differenze in termini di velocità però è probabile che le PCRE continuerebberò ad avere la meglio).