2013-08-02 16 views
7

Situazionepreg_replace: aggiungere numero dopo backreference

voglio usare preg_replace() per aggiungere una cifra '8' dopo ogni [aeiou].

Esempio

da

abcdefghij 

al

a8bcde8fghi8j 


Domanda

Come devo scrivere la stringa sostitutiva?

// input string 
$in = 'abcdefghij'; 

// this obviously won't work ----------↓ 
$out = preg_replace('/([aeiou])/', '\18', $in); 

Questo è solo un esempio , così suggerendo str_replace() è non una risposta valida.
Voglio sapere come avere il numero dopo il backreference nella stringa di sostituzione.

risposta

18

La soluzione è di racchiudere il riferimento in ${}.

$out = preg_replace('/([aeiou])/', '${1}8', $in); 

che sarà in uscita a8bcde8fghi8j

Vedere the manual su questo caso speciale con backreference.

+2

Grazie; Dovrei RTFM prima di chiedere la prossima volta. – MightyPork

+0

Ok. Prometti solo di non arrenderti a fare domande valide (come questa). Impariamo mettendo in discussione, e questa volta, credo che tu abbia una risposta 10 volte più veloce che per tentativi ed errori. Qualcuno è tenuto a conoscere la soluzione ...;) –

+0

In effetti, dopo averlo postato, sono andato su php.net e * ho trovato la risposta *. Stavo già scrivendo la propria risposta quando mi hai risparmiato la vergogna di rispondermi da solo;) – MightyPork

4

È possibile farlo:

$out = preg_replace('/([aeiou])/', '${1}' . '8', $in); 

Here is a relevant quote from the docs regarding backreference:

Quando si lavora con un criterio di sostituzione in cui un riferimento è immediatamente seguito da un altro numero (es: un numero che segue immediatamente il criterio riconosciuto), non è possibile utilizzare la nota notazione \ 1 per il proprio riferimento. \ 11, ad esempio, confondere preg_replace() poiché non sa se si desidera il backreference \ 1 seguito da un letterale 1 o il backreference \ 11 seguito da niente. In questo caso la soluzione è usare \ $ {1} 1. Questo crea un backreference isolato di $ 1, lasciando l'1 come un letterale.