MySQL在phpMyAdmin中查找和替换(删除)正则表达式

时间:2016-03-22 15:37:12

标签: mysql regex phpmyadmin

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

我需要在每条记录中找到并替换/删除以下文本,并保留所有其他HTML完整(下面的字符串每条记录只出现一次):

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

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

我知道这应该是非常简单和一些愚蠢的问题,但我不是正则表达专家,并且不能完全解决我做错的事情(可能没有逃避足够的字符或太多)。 / p>

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

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

PHP中的find / replace语句可能是这样的:

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

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

例如,如果:

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

输出:

  

之前的所有内容   (link = http://www.foofle.com,text = Foofle)
  

之后的所有内容