我正在尝试在MySQL数据库中的特定列(大约20k +记录)上执行查找和替换(实际上是删除),其中所讨论的列包含HTML(CMS中页面内容的正文)
我需要在每条记录中找到并替换/删除以下文本,并保留所有其他HTML完整(下面的字符串每条记录只出现一次):
<h2>Location Map</h2><p><a href="[?]" onclick="window.open(this.href); return false;">[?]</a></p>
其中“[?]”是一串可变内容和长度(包括字母数字和符号),其余静态内容与上面显示的完全相同。
我知道这应该是非常简单和一些愚蠢的问题,但我不是正则表达专家,并且不能完全解决我做错的事情(可能没有逃避足够的字符或太多)。 / p>
最好我喜欢我可以在phpMyAdmin中使用的正则表达式来执行查找和替换。
非常感谢提前。
答案 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)
之后的所有内容