MySQL正则表达式替换?

4

我有一个带有blob文本字段的表格。这个blob里面有很多html内容。其中一个html片段是h2标签。我想找到所有h2标签中单词的实例,并将其替换为另一个单词(同时保留其他单词不变)。

例如,我想在以下内容中用“bumbles”替换h2“wiggles”:

之前:

<h2>This is some wiggles html!</h2>
<p>And here is some more wiggles html that could be ignored</p>
<h2>And this is a decoy h2</h2>

之后:

<h2>This is some bumbles html!</h2>
<p>And here is some more wiggles html that could be ignored</p>
<h2>And this is a decoy h2</h2>

我担心的一个陷阱是正则表达式不会在第一个h2结束时停止,而是一直继续到最后一个关闭标签。

我可以访问shell和phpmyadmin。


5
仅仅为了好玩而点赞+1是不对的吗? - delete me
哈哈,我不会抱怨:)。一定要保持乐趣;) - Matrym
3个回答

3

使用正则表达式在MySQL中替换文本

您可以添加一个库到MySQL中以获得此功能。

添加:LIB_MYSQLUDF_PREG
允许:使用PCRE进行正则表达式搜索和替换。
网站:http://www.mysqludf.org/lib_mysqludf_preg/

示例:

SELECT PREG_REPLACE('/(.*?)(fox)/' , 'dog' , 'the quick brown fox' );

产出:

the quick brown 

使用正则表达式匹配HTML

使用正则表达式解析HTML并不容易,而且有很多陷阱。不过,您的例子足够简单,应该能够做到您想要的。

我认为这篇文章会对您有所帮助:http://haacked.com/archive/2004/10/25/usingregularexpressionstomatchhtml.aspx


1

mySQL本身没有正则表达式替换功能:regex functions仅限于匹配。

看起来有一个user defined function可以添加这个功能,但是它需要重新编译mySQL,可能不是一个好的选择。

我建议使用像PHP这样的编程/脚本语言,使用其内置的正则表达式替换函数来更改内容,并更新记录。

编辑:忽略了php标签。


是的,Oracle和PostgreSQL是我所知道的唯一具有本地正则表达式替换功能的数据库。在SQL Server 2005+中,您必须通过CLR函数自己构建它... - OMG Ponies

1

HTML不是一种常规语言,因此尝试使用正则表达式解析它并不是最佳选择。在我看来,我希望利用一个HTML解析器来完成这项工作。这里有一个示例解析器。

祝愉快!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接