我的数据库存在问题。我正在使用的网站使用的是具有非常奇怪的数据库结构的旧cms,并且链接不正常但是一些自定义短代码版本。现在,当网站迁移到wordpress时,这些链接被一些脚本取代。但它在数据库中跳过大约2k篇文章(我们有大约27,000篇文章)。我能找到的是这些是我的问题的可能组合。
<a href="{{article::4111}}">Article title</a>
<a href="{{article::4111}}">{{article:4111}}</a>
or just {{article::4111}}
这是文章的一个例子:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque
faucibus vehicula mauris. Quisque sed ex ac lacus tempus blandit.
Fusce in leo sit <a alt="Some text" title="other text" href="{{article::4111}}">{{article::4111}}</a> nisi porttitor volutpat ac vel tellus. Donec in
pellentesque nunc. Maecenas congue libero dui, id fermentum ligula
consequat ac. Suspendisse tempus magna lorem, nec facilisis dolor
sodales at. Donec laoreet at justo non {{article::4511}}. Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Aliquam porttitor, orci nec
molestie interdum, libero est molestie sapien, efficitur facilisis mi
diam non enim. Etiam viverra dolor ut augue vestibulum, placerat
condimentum magna tincidunt. Integer rhoncus nulla at elit sodales
pharetra. Maecenas congue erat ut tellus imperdiet molestie. Sed sed
metus tincidunt, finibus ante quis, consequat orci. Nam non massa nec
ipsum congue pretium. Curabitur sollicitudin, dui vitae venenatis
hendrerit, tortor massa mattis nisl, vel rutrum enim nibh in tortor.
Related news:
{{article::75145}}
我的想法是使用php和正则表达式找到它并用普通链接替换它,但我的问题是我不知道正则表达式那么好,我需要某种检查才能看到哪一个可能的情况是。所以,如果有人遇到这样的问题,我真的很感激一些帮助。但主要的问题是,这可以在文章的任何部分和随机的时间内找到(它可以只有一个,或者可能是十个或二十个),而::之后的部分是文章的ID,是随机,所以使用经典的爆炸功能不会起作用。到目前为止我所做的是导出我的wp_posts表并导入到自定义数据库中,并且只有一个干净的php项目连接到该表,我将使用普通的PHP而不是wp函数。所以,如果它只位于href=""
标记内,我需要做的是我需要用完整链接替换它,但如果它位于<a> </a>
和href=""
标记之间,我需要用链接替换href标签,用标题替换第二部分。很抱歉这么长的描述,但我认为这将有助于最好地描述我的问题。
答案 0 :(得分:3)
为了匹配这些,它非常简单:/{{article::\d+}}/
这匹配 article :: 后跟一个或多个数字。 Demo
要替换给定字符串中的所有字符串,请使用以下内容:
<?php
$str = '<a href="{{article::4111}}">Article title</a>
<a href="{{article::4111}}">{{article::4111}}</a>
or just {{article::4111}}
';
$str = preg_replace_callback(
'/{{article::(\d+)}}/',
function($match){
// some callback function, where $match[1] contains the number
// here we just add a path with the number as argument for a file article.php
return 'http://domain.com/article.php?id='.$match[1];
},
$str
);
echo $str;
?>
在该功能中,您还可以进行一些数据库调用或其他任何操作来获取新的URL。
答案 1 :(得分:0)
试试这个:
/((\<a href=\")\{\{.*?\}\}(\">)\{\{.*?\}\}(<\/a\>)|\{\{.*?\}\})/gm