【问题标题】:MySQL Find and Replace (Delete) Regex in phpMyAdminMySQL 在 phpMyAdmin 中查找和替换(删除)正则表达式
【发布时间】:2016-03-22 15:37:12
【问题描述】:

我正在尝试对 MySQL 数据库中的特定列(大约 20k+ 条记录)执行查找和替换(实际上是删除),其中相关列包含 HTML(CMS 中页面内容的正文文本) .

我需要从每条记录中查找并替换/删除以下文本,并保持所有其他 HTML 不变(以下字符串每条记录仅出现一次):

<h2>Location Map</h2><p><a href="[?]" onclick="window.open(this.href); return false;">[?]</a></p>

其中“[?]”是一个可变内容和长度的字符串(包括字母数字和符号),其余的静态内容完全如上所示。

我知道这应该是一个非常简单且有点愚蠢的问题,但我不是正则表达式专家,不能完全弄清楚我做错了什么(可能没有转义足够多或太多的字符)。

最好我想要一个可以在 phpMyAdmin 中使用的正则表达式来执行查找和替换。

非常感谢。

【问题讨论】:

  • MariaDB 有REGEXP_REPLACE,MySQL 没有。

标签: mysql regex phpmyadmin


【解决方案1】:

PHP 中的查找/替换语句可能是这样的:

$regex = '#<h2>Location Map</h2><p><a href="(.*?)" onclick="window.open.*?>(.*?)</a></p>#';
$result = preg_replace($regex, $replace, $html);

...其中 $html 将是您从数据库中检索的原始数据,而 $replace 将是您要插入的值,而不是匹配的字符串。

例如,如果:

$html = 'all that comes before
<h2>Location Map</h2><p><a href="http://www.foofle.com" onclick="window.open(this.href); return false;">Foofle</a></p>
all that comes after';

$replace = "(link=$1, text=$2)";

$result = preg_replace($regex, $replace, $html);
echo $result;

输出:

之前的一切
(链接=http://www.foofle.com,文本=Foofle)
之后的一切

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2011-06-16
    • 1970-01-01
    • 2017-01-28
    • 2015-01-11
    • 2012-12-02
    相关资源
    最近更新 更多