我的xml中多次出现以下文本:



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

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

当然,我将硬编码字符串(“test”)用于测试目的,因为当前文本中已经包含2015。因此,我的目标是更改此设置:



到这个:



我的正则表达式错了吗?

附注:仅是为了使每个人都能更好地了解上下文,这里(部分)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'
$替换:'\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>

最佳答案

在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(通常会认为是)对于引擎来说是令人困惑的(应该使用哪个捕获组?

关于PHP preg_replace()更改版权年份,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34335647/

10-14 17:06
查看更多