2015-12-17 8 views
5

Ho il seguente testo che si verificano nel mio xml un paio di volte:PHP preg_replace() per cambiare anno del copyright

Copyright © 2015.

Sto cercando di usare espressioni regolari per cambiare il sopra il testo in modo dinamico in modo da riflettere sempre l'anno corrente nell'output finale. Questo è il mio tentativo e non sembra funzionare:

$finaloutput = preg_replace("/Copyright © [0-9]+/", "test", $finaloutput); 

Naturalmente, sto usando una stringa hard-coded ("test") solo a scopo di test, perché il testo attuale ha già 2015 di esso. Quindi, il mio obiettivo è quello di cambiare questo:

Copyright © 2015. Tutti i diritti riservati ....

in questo:

Copyright © di prova. Tutti i diritti riservati ....

La mia espressione regolare è errata?

PS: Solo per il gusto di dare a tutti una migliore sensazione del contesto, ecco (una parte del) il frammento di XML $finaloutput è assegnato a:

<div class="dict_source"><strong>Powered by</strong> <a target="_blank" rel="nofollow" href="http://www.collinsdictionary.com/dictionary/english-spanish">Collins Complete Spanish Electronic Dictionary</a><br>Copyright © 2015 HarperCollins Publishers Limited.</div> 

Aggiornamento: Ho provato la risposta offerta da @ Avinash e ancora non è riuscito a farlo funzionare. Per illustrare meglio la questione, ho sottoposto a test un tester online preg_replace(). È finita allo https://www.functions-online.com/preg_replace.html. Ecco le informazioni sono entrato nei vari campi di input per il test:

$ modello: '/(Copyright\s+©\s+)[0-9]+/u'

$ sostituzione: '\1test'

$ subject: <div class="dict_source"><strong>Powered by</strong> <a target="_blank" rel="nofollow" href="http://www.collinsdictionary.com/dictionary/english-spanish">Collins Complete Spanish Electronic Dictionary</a><br>Copyright © 2015 HarperCollins Publishers Limited.</div>

+0

E ''' o l'entità? Anche gli spazi sono corretti? Prova 'var_dump ($ finaloutput);'. – chris85

risposta

1

Uso Avinashs regex in PHP:

<?php 
$subject = '<div class="dict_source"><strong>Powered by</strong> <a target="_blank" rel="nofollow" href="http://www.collinsdictionary.com/dictionary/english-spanish">Collins Complete Spanish Electronic Dictionary</a><br>Copyright © 2015 HarperCollins Publishers Limited.</div>'; 
$regex  = '/(Copyright\s+©\s+)[0-9]+/u'; 
$output = preg_replace($regex, "\${1}2016", $subject); 
echo $output; // Happy new Year 2016! 
?> 

mente la parte di ricambio: \12016 (come uno normalmente pensare) confonde per il motore (che ha catturato gruppo sono utilizzate \1\12016??? [anche se questo non esiste]), quindi la soluzione è usare le parentesi graffe ricci.

6

Aggiungi u modificatore ogni volta che hai a che fare con caratteri unicode.

$finaloutput = preg_replace('/(Copyright\s+©\s+)[0-9]+/u', '\1test', $finaloutput); 
+0

La sintassi che date sembra perfetta e abbastanza semplice per me, eppure si rifiuta di lavorare per qualche ragione dimenticata da Dio. Analizzerò ulteriormente per vedere dove potrebbe trovarsi il problema. Certamente non sembra essere nella tua sintassi. E a cosa serve "\ 1"? Essere curioso. – TheLearner

+1

'\ 1' fa riferimento a tutti i caratteri corrispondenti al primo gruppo. –