html - MySQL - 从内容列内的 href 属性中存在的动态 url 中搜索并替换文本 (".html")

标签 html mysql regex sql-like

我正在尝试使用正则表达式引用创建一个 MySQL 查询,以更正我博客中的数据输入错误。具体来说,我需要在我的文章中找到一些 href 值以“.html”(包括点)结尾的内部链接,并删除该错误部分。这些链接应该没有 .html 扩展名。当然这不是那么简单。

问题:我有很多外部链接也以这个扩展名结束(.html),我根本不想更改它。我只想更改一些以 .html 结尾的内部链接。这些链接也是相对的。因此,查询必须更复杂才能仅查找这些链接内容(约 6000 篇文章)。

好的一点是我需要搜索的这些链接已经有一个模式。这是一个示例 index.php?option=com_k2&view=item&id=6238:alias-title-of-an-article.html (是的,它是带有 K2 的 Joomla 安装)

所以我的第一个想法是创建一个带有两个条件的查询。 A) 搜索所有 href 值以 index.php?option=com_k2&view=item&id= 开头的链接,并删除其结尾部分 .html(如果存在)。到目前为止,我已经成功做到了:

正则表达式引用: href="index\.php\?option=com_k2.*?(?=")

MySQL 查询: 更新 'qc95t_k2_items' SET 'introtext' = REPLACE('introtext', '.html', '') WHERE 'catid'=84 AND 'introtext' LIKE '%href="index\.php\?option=com_k2.*?(?=")%';

除了这个查询 100% 错误的事实之外,因为它将选择带有 .html 的所有引用,它还返回 0 个结果,因为它找不到任何内容。另外,在下面的示例中,我的正则表达式引用正在工作(我认为),除了“以 .html 结尾”条件之外。

REGEX Ref Example

非常感谢您的帮助。

最佳答案

最后,我自己想出了一个解决办法。由于直接通过 MySQL 查询使用正则表达式替换(REPLACE + REGEXP)创建如此复杂的查询几乎是不可能的,所以我找到的解决方案是这样的:

  1. 只需下载(导出)特定表 (table.sql)
  2. 使用 Notepad++ 编辑器打开
  3. 创建一个匹配 2 组字符串的正则表达式。第一组将包含直到“.html”的 url 部分(在本例中为 "index.php?option=com_k2&view=item&id=6238:alias-title-of-an-article )和第二组仅包含您要删除的部分(在本例中为 .html)
  4. 使用 Notepad++ 添加以下正则表达式命令进行搜索和替换

搜索: ([^href="]*"index\.php\?option=com_k2&view=item&id=\d{2,4}:[A -Za-z0-9]+(?:-[A-Za-z0-9]+)*[\w\-]*)\.html

替换为: $1

  • 保存表格并将其上传回数据库
  • 上面的正则表达式命令(搜索字段)对除“.html”部分之外的 url 进行分组,在替换 ($1) 上,它告诉记事本替换所有内容,但保留正确的第一组不带 .html 的 url。这完全有效(已测试),就我而言,我已经清理了 658 个网址。您可以在下面找到正在运行的正则表达式:

    REGEX Command

    关于html - MySQL - 从内容列内的 href 属性中存在的动态 url 中搜索并替换文本 (".html"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49272669/

    相关文章:

    php - <?PHP、REGEX 和我。三幕悲剧

    javascript - 如何获取特殊字符后的最后一个单词?

    javascript - 滚动时触发动画

    覆盖整个可见页面的 HTML 覆盖高度

    php - 如何使用 PHP 显示 Bootstrap 模式?

    c# - 将多个参数从 c# 传递到 python

    php - 如何在单个字段中插入数组

    jQuery slideToggle 重叠的 div 集

    未创建 MySQL UNIQUE KEY 和 FOREIGN KEY 同一列

    javascript - 括号正则表达式/解析器