PHP preg_replace()更改版权年份

时间:2015-12-17 13:20:59

标签: php regex preg-replace

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

  

版权所有©2015。

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

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

当然,我正在使用硬编码字符串(“测试”)仅用于测试目的,因为当前的文本已经有2015年。所以,我的目标是改变这个:

  

版权所有©2015。保留所有权利....

进入这个:

  

版权所有©测试。保留所有权利....

我的正则表达式错了吗?

P.S。:只是为了让每个人都更好地了解上下文,这里(部分)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>

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

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

$ replacement '\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>

2 个答案:

答案 0 :(得分:6)

只要您处理unicode字符,就添加u修饰符。

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

答案 1 :(得分: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?[虽然这不是存在]),因此解决方案是使用卷曲括号。