2015-12-17 31 views
5

我已經出現在我的XML以下文本幾次:PHP的preg_replace()來改變版權年份

版權所有©2015年

我想使用正則表達式來改變以動態方式顯示文本以便在最終輸出中始終反映當前年份。這是我的嘗試,它似乎並沒有工作:

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

當然,我使用的是硬編碼字符串(「測試」),只是爲了測試目的,因爲目前的案文已經在它2015年。所以,在這裏我的目標就是要改變這樣的:

版權所有©2015年保留所有權利....

到這一點:

版權所有©測試。保留所有權利....

我的正則表達式是否錯誤?

PS:只是爲了給大家的背景下更好的手感的緣故,這裏的XML片段$finaloutput被分配到(的部分):

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

更新:我試圖通過@提供的答案阿維納什仍然沒有成功。爲了更好地說明這個問題,我挖掘了一個在線preg_replace()測試儀。結束於https://www.functions-online.com/preg_replace.html。下面是我在各種輸入字段中輸入的測試信息:

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

$更換'\1test'

$主題<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

它是'''或實體?這些空間是否正確?試試'var_dump($ finaloutput);'。 – chris85

回答

1

在PHP使用Avinashs正則表達式:

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

心更換部件:\12016(作爲一個通常認爲)是混淆用於發動機(其捕獲的組應使用\1\12016???? [雖然這不存在]),所以解決方案是使用曲線括號。

6

添加u修改每當你處理unicode字符。

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

你給的語法對我來說看起來很完美和直截了當,但它拒絕爲一些被遺忘的原因工作。我會進一步調查,看看問題可能出在哪裏。它當然似乎並不符合你的語法。什麼是「\ 1」?只是好奇。 – TheLearner

+1

'\ 1'指的是第一組匹配的所有字符。 –