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