我有一张带有记录的表。记录的字段content
包含一些类似<p><a href=\"/pictures/image.jpg\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"/pictures/image.jpg\" vspace=\"6\" hspace=\"6\" align=\"left\" alt=\"Alt text\" title=\"Title Text\" width=\"260\"></a> Some text content...
我需要删除<a></a>
周围的<img>
标签。字符串中可以出现多个<a><img></a>
。我还做了一个相应的正则表达式,并了解了REGEXP_REPLACE
函数。理想情况下,我希望
UPDATE table_name SET content = REGEXP_REPLACE(content, '/<a\shref=\\?"\/pictures\/.+">(<img.+">)<\/a>/gmU', '\\1') WHERE id=1
锻炼,但不能。我不知道将标记gmU
放在哪里。另外,在我在互联网上找到的文章/文档中,我没有看到诸如g
(全局)和U
(不完整)之类的标志。默认情况下它是全局的还是不协调的?如何使其全部正常工作?
10.3.15-MariaDB。
答案 0 :(得分:0)
在MariaDB中,您可以使用REGEXP_REPLACE
表示法在内嵌正则表达式中将标记传递到(?x)
,其中x
是标记。默认情况下,REGEXP_REPLACE
替换字符串中 all 个出现的模式,因此您不需要g
标志;您也不需要多行标志m
,因为您没有尝试使用行锚的开始/结束。您可以使用U
来代替?
修饰符,以使+
不贪心。
您的正则表达式有几个问题:
/
包含正则表达式\s
代表文字s
,需要为\\s
\
,您需要使用\\\\
,而不是\\
此正则表达式应为您提供所需的结果
(?U)<a\\s.*href=\\\\?"/pictures.+(<img.+>)</a>
在查询中
SELECT REGEXP_REPLACE(content, '(?U)<a\\s.*href=\\\\?"/pictures.+(<img.+>)</a>', '\\1')
FROM test