在 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 个单词并计算单词出现次数?