2015-12-17 6 views
5

Ich habe den folgenden Text ein paar Mal in meinem xml vorkommen:PHP preg_replace(), um Copyright-Jahr zu ändern

Copyright © 2015.

Ich versuche Regex zu verwenden, um die sich ändern über dem Text dynamisch, um immer das aktuelle Jahr in der endgültigen Ausgabe widerzuspiegeln. Dies ist mein Versuch, und es scheint nicht zu funktionieren:

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

Natürlich, ich bin eine hartcodierte Zeichenfolge („test“) nur für Testzwecke verwenden, da der aktuelle Text bereits 2015 in ihm hat. Also, mein Ziel ist es, dies zu ändern:

Copyright © 2015. Alle Rechte vorbehalten ....

in dieser:

Copyright © Test. Alle Rechte vorbehalten ....

Ist meine Regex falsch?

PS: Nur um jeder ein besseres Gefühl für den Kontext zu geben, hier ist (ein Teil) der XML-Snippet $finaloutput zugeordnet ist:

<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> 

Update: Ich habe versucht, die Antwort von @ angeboten Avinash und schaffte es immer noch nicht, es zum Laufen zu bringen. Um das Problem besser zu veranschaulichen, habe ich einen Online-Tester preg_replace() ausgegraben. Es ist vorbei bei https://www.functions-online.com/preg_replace.html. Hier ist die Information, die ich in den verschiedenen Eingabefeldern für den Test eingegeben:

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

$ Ersatz: '\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

Ist es "©" oder die Entität? Sind die Räume auch korrekt? Probieren Sie 'var_dump ($ finaloutput);'. – chris85

Antwort

1

Verwendung 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! 
?> 

Geist das Ersatzteil:? \12016 (wie man normalerweise denken würde) für den Motor verwirrend (die Gruppe gemacht wird, wird \1\12016 verwendet werden? [obwohl dies nicht existiert], so ist die Lösung, lockige Klammern zu verwenden.

6

hinzufügen u Modifikator wann immer du mit Unicode-Charakteren zu tun hast.

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

Die Syntax, die Sie geben, sieht perfekt und ziemlich einfach zu mir aus und doch weigert es sich, für irgendeinen gottverlassenen Grund zu arbeiten. Ich werde weiter untersuchen, um zu sehen, wo das Problem liegen könnte. Es scheint nicht mit Ihrer Syntax zu sein. Und wofür ist das "\ 1"? Neugierig sein. – TheLearner

+1

"\ 1" bezieht sich auf alle Zeichen, die der ersten Gruppe entsprechen. –