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

时间:2015-01-02 22:30:03

标签: mysql string wordpress phpmyadmin substring

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

我正在尝试快速更新,我在其中提取网址并将其粘贴到我想要添加的短代码中。

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

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

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

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

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

非常感谢!

4 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

$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)

答案 2 :(得分:0)

<?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
?>

答案 3 :(得分:0)

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