从MYSQL数据列中提取URL有效或无效

时间:2017-08-09 21:04:04

标签: php mysql

我的MYSQL数据库中有一列headline TEXT NOT NULL 我想为每个记录浏览此列,并提取URL(如果有的话)。该URL将存储在另一列article_url VARCHAR (225) NULL中。如果没有网址,则只需将NULL放入列中。

最后,我希望每次将新记录插入数据库时​​都要更新。以下是我到目前为止的情况。

更新:这是我数据的标题列的示例 Drastic decline in Social Sciences intake *: http:// bit.ly/2vXzPhQ pic.twitter.com/PAZvG3tX17正如您所看到的那样,数据集中有一个URL,但URL已损坏,所有网址都被http://和URL的其余部分分隔开来。所以我需要在PHP中获取一个函数,当它获得无效的URL时,它会找到有效或无效的URL。它将修复它。

这是我迄今为止所拥有的。

$result = $conn->query($sql);

$reg_exp = "/^(http(s?): \/\/)?(www\.)+[a-zA-Z0-9\.\-\_]+(\.[a-zA-Z]{2,3})+(\/[a-zA-Z0-9\_\-\s\.\/\?\%\#\&\=]*)?$/";

if ($result->num_rows > 0) 
{
    // output data of each row
    while($row = $result->fetch_assoc()) 
    {
        echo "id: " . $row["id"]. " headline: " . $row["headline"]. "<br>";
        if(preg_match($reg_exp, $row["headline"]) == TRUE)
        {
            echo "URL is valid format";
        }
        else
        {
            echo "URL is invalid format";
        }
    }
} 
else 
{
    echo "0 results";
}

1 个答案:

答案 0 :(得分:0)

对于仅限MySQL的解决方案,您有四个部分可以解决:

  1. 一个作为现有数据条目的更新运行

  2. AFTER INSERT Trigger

  3. 的形式运行
  4. 对于1 + 2,您需要正确的REGEX-Syntax of MySQL。 php-regex可能是做SELECT headline, Headline REGEXP '(insert your regex here)' FROM table;的一个很好的起点。如果您的正则表达式是正确的,那么您可以对数据库进行迭代检查。

  5. this answer中,您可以找到regexp_replace的一个版本,您可以将其添加到数据库中。这可以在UPDATE table SET artice_url = IF(...REGEXP...) regexp_replace(headline,...)(......也需要正确填写)以及触发器中使用。