我有一个文章数据库,其中包含大约8,000篇文章中约4,000个断开的链接。这些损坏的链接中大约有一半遵循一种模式,使用正确的PHP脚本,可以用来自动修复那些损坏的链接。
有问题的链接包含以下链接:
<a href="http://www.mydomain.tld/article1234-plus-a-slug-
that-varies-in-length.html">some text</a>
“1234”部分代表文章的唯一ID。它可以是介于101和10700之间的三到五位数字。该唯一ID的数据库记录包含该页面的正确URL。
我需要识别符合此模式的每篇文章的HTML中的字符串,提取URL的“1234”部分,将其分配给$变量,然后替换文章的HTML标记中的URL链接到从该数据库获取的唯一ID的正确URL。
我怀疑preg_match是在这种情况下使用的合适函数,但我真的看不到如何构建PHP脚本。 (我的PHP技能不是很好。也不是我的正则表达式技能。)任何人都可以用一个简单的脚本来帮我处理这个任务吗?
答案 0 :(得分:1)
是的,正常的表达似乎很适合这个挑战。
如果这些是长度从3到5的唯一一位数,您可以使用以下正则表达式:
$str = "http://www.mydomain.tld/article1234-plus-a-slug-
that-varies-in-length.html";
preg_match_all('/[0-9]{3,5}/', $str, $matches);
var_dump($matches);
{3,5}
表示长度。所以这里的输出是:
array (size=1)
0 =>
array (size=1)
0 => string '1234' (length=4)
答案 1 :(得分:1)
$url = '<a href="http://www.mydomain.tld/article1234-plus-a-slug-
that-varies-in-length.html">some text</a>';
preg_match("#article([0-9]+)#i", $url , $urlmatches);
printf( 'id: %d' , (int) $urlmatches[1] );
答案 2 :(得分:0)
那是你在找什么?
$html = '<a href="http://www.mydomain.tld/article1234-plus-a-slug-
that-varies-in-length.html">';
$html = preg_replace('|<a href="[^"]*article(\d+)[^>]*>|', '<a href="htttp://example.com/article.php?id=$1">', $html);
print $html . "\n";