PHP preg_replace()更改版权年份

The*_*ner 5 php regex preg-replace

我的xml中出现了以下文本:

版权所有©2015.

我正在尝试使用正则表达式动态更改上面的文本,以便始终反映最终输出中的当前年份.这是我的尝试,它似乎不起作用:

$finaloutput = preg_replace("/Copyright © [0-9]+/", "test", $finaloutput);
Run Code Online (Sandbox Code Playgroud)

当然,我正在使用硬编码字符串("测试")仅用于测试目的,因为当前的文本已经有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>
Run Code Online (Sandbox Code Playgroud)

更新:我尝试了@Avinash提供的答案,但仍未能使其正常工作.为了更好地说明问题,我挖出了一个在线preg_replace()测试人员.它结束于https://www.functions-online.com/preg_replace.html.以下是我在各种输入字段中输入的用于测试的信息:

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

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

Avi*_*Raj 6

u每当您处理unicode字符时添加修饰符.

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


Jan*_*Jan 1

在 PHP 中使用 Avinashs 正则表达式:

\n\n
<?php\n$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 \xc2\xa9 2015 HarperCollins Publishers Limited.</div>\';\n$regex      = \'/(Copyright\\s+\xc2\xa9\\s+)[0-9]+/u\';\n$output = preg_replace($regex, "\\${1}2016", $subject);\necho $output; // Happy new Year 2016!\n?>\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意替换部分:(\\12016正如人们通常认为的那样)会让引擎感到困惑(应使用哪个捕获组???\\1[\\12016虽然这不存在]),所以解决方案是使用括号。

\n