在 MySQL 中,如何从长文本字符串中提取 URL?

Posted

技术标签:

【中文标题】在 MySQL 中,如何从长文本字符串中提取 URL?【英文标题】:In MySQL, how to extract an URL from a long text string? 【发布时间】:2015-03-01 05:04:06 【问题描述】:

我正在学习 mysql 并使用 phpMyAdmin 在我的 Wordpress 数据库中为拥有数千种产品的商店进行更改。

我正在尝试进行快速更新,从中提取一个 URL 并将其粘贴到我要添加的短代码中。

目前,我表中的每条记录在一堆其他文本中的某处都有这个。

<input type="hidden" name="prtks" value="http://domainname/folder/filename.mp3"/>

我想保留它并添加到同一字段中的每条记录

[sc_embed_player_template1 fileurl="url from above"/"]

这相当棘手,因为我知道我可以通过计算字符来找到一个子字符串,但是有没有办法将完整的 URL 从 http 一直拉到最终的 .mp3?

非常感谢!

【问题讨论】:

只需使用搜索和替换插件对数据库进行更改。 【参考方案1】:

这不在 MySQL 中,但如果我正确理解您的问题,您似乎是在谈论通过执行以下操作在 php 文件中执行此操作:

<?php 
    $url = '<input type="hidden" name="prtks" value="http://domainname/folder/filename.mp3"/>';
    $parts = explode('"', $url);
    echo 'URL: '.$parts[5];
?>

这使用 php explode() 将字符串分解为基于 " 字符的数组。

然后您可以直接回显第 6 部分 ($parts[5])

【讨论】:

【参考方案2】:

为什么不使用简单的正则表达式来提取网址?

$str = '<input type="hidden" name="prtks" value="http://domainname/folder/filename.mp3"/>';
preg_match_all('/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $str, $match, PREG_PATTERN_ORDER);
var_dump($match[0][0]);
// string 'http://domainname/folder/filename.mp3' (length=37)

【讨论】:

【参考方案3】:
<?php

function urltxt($string)


$regex = "/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i"; ///(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]2,3(\/\S*)?/";
preg_match_all($regex, $string, $matches);
  return $matches[0];


$url = urltxt($sqlresult);
echo $url[0];

//this way its more easier i guess
?>

【讨论】:

【参考方案4】:

如果文件扩展名都是 3 个字符,您可以使用像 http://*\.3 这样的正则表达式来查找 URL,但除非它们有某种分隔符,否则很难找到。您可以尝试http://*\.(mp3|html|gif|png|exe|php|aif|wav) 并列出所有可能的扩展名(如果它们不同)。您也可以尝试仅列出超过 3 个字符的扩展:http://*\.(3|html|jpeg|aiff|torrent)

【讨论】:

以上是关于在 MySQL 中,如何从长文本字符串中提取 URL?的主要内容,如果未能解决你的问题,请参考以下文章

从长的复杂日期加上时间戳中提取日期?

如何从长字符串中获取电子邮件地址

如何提取 MySQL 字符串中的第 n 个单词并计算单词出现次数?

截取Excel字符串的部分字符

在 STR_TO_DATE 中运行 MySQL REGEXP_SUBSTR 以从文本中提取日期时遇到问题

如何从长值转换为 KB 字符串格式