需要帮助使用preg_match来修复数据库中文章中的链接

时间:2013-12-27 22:56:52

标签: php html mysql regex

我有一个文章数据库,其中包含大约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技能不是很好。也不是我的正则表达式技能。)任何人都可以用一个简单的脚本来帮我处理这个任务吗?

3 个答案:

答案 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";