我想更新表中的特定字符串,但字符串本身有变量。所以,
https://www.youtube.com/watch?v=examplevideo
“examplevideo”是一个变量字符串,我想为
中的替换字符串保留<iframe width="420" height="315" src="https://www.youtube.com/embed/examplevideo"></iframe>
有没有办法在一个更新语句中执行此操作?
所以,表格看起来像这样;
select messageid,userid, subject, message from feed_messages;
+-----------+--------+-------------+--------------------------------------------------------------------+
| messageid | userid | subject | message |
+-----------+--------+-------------+--------------------------------------------------------------------+
| 74 | 67 | Test | message |
| 75 | 67 | Test | message |
| 77 | 67 | Test | message |
| 78 | 67 | Test | message |
| 90 | 70 | How are ya? | message |
| 106 | 67 | Test | message |
| 107 | 67 | Test | message |
| 117 | 67 | Test post | Here's a test post;
https://www.youtube.com/watch?v=GWqD7GyJBVM |
+-----------+--------+-------------+--------------------------------------------------------------------+
我想将所有内容保留在messageid 117的消息字段中,但修改链接以便在发布时嵌入视频。
答案 0 :(得分:1)
不幸的是,MySQL的本地REGEXP
表达式,即使与REPLACE()
结合使用,也不足以完成您想要的任务。
在纯MySQL中,除非你使用this set of user-defined functions (UDFs) for MySQL为MySQL语句实现高级正则表达式功能,例如组捕获(这是你需要的),否则这不容易做到。
如果您能够安装这些UID,则可以使用以下内容:
UPDATE `feed_messages` SET
`message` = REGEXP_REPLACE(
`message`,
'https?://www\.youtube\.com/watch\?v=([a-zA-Z0-9-_]{11})[a-zA-Z0-9-_%&=]*',
'<iframe src="https://www.youtube.com/embed/$1"></iframe>')
WHERE
`message` REGEXP 'youtube\.com/watch\?v=[a-zA-Z0-9-_]{11}';
如果您无法使用这些UDF,那么这几乎必须在数据库之外完成。例如,在PHP中:
$query = 'SELECT `messageid`,`userid`,`subject`,`message` FROM `feed_messages`';
$msgs = $mysqli->query($query);
while ($row = $msgs->fetch_assoc()) {
echo preg_replace(
$row['message'],
'/https?://www\.youtube\.com/watch\?v=([a-zA-Z0-9-_]{11})[a-zA-Z0-9-_%&=]*/im',
'<iframe width="420" height="315" src="https://www.youtube.com/embed/$1"></iframe>')
}
希望这有帮助!
答案 1 :(得分:0)
您可以使用SUBSTRING_INDEX来确定字符串“https://www.youtube.com/watch?v=”的位置,然后再次执行此操作以获取下一个空格的位置。通过这两个位置,您可以提取视频ID并组合Leonid的替换和CONCAT来插入打开和关闭iframe标记。