可能重复: 在mysql中模拟regex捕获组
日安,
我在MySQL表中存储了许多行数据。一个典型的值可能如下所示:
::image-gallery::
::gallery-entry::images/01.jpg::/gallery-entry::
::/image-gallery::是否有一种方法--通过一个正则表达式(我可以a)从第一行(可以是任何短语,而不仅仅是图像库)提取映像库一词,然后将中线提取为两个单独的值,如下所示:
图库-条目,然后是图像/01.jpg
可以有许多行::图库条目::值,它们也可以被称为任何东西。一个更完整的例子是:
::image-gallery::
::title::MY GALLERY::/title::
::date::2011-05-20::/date::
::gallery-entry::images/01.jpg::/gallery-entry::
::/image-gallery::本质上,我想要这个信息:内容类型(图片库)在上述情况下,第一行和最后一行。然后我需要标题作为键值样式对,所以 title 作为键,我的图库作为值。然后,随后,我将需要所有字段行(图库-条目)作为键值对。
这是用于迁移脚本,其中来自旧系统的数据将被迁移到具有不同语法的新系统中。
如果PHP语句不能工作,那么用MySQL脚本解析结果以进行数据提取会更容易吗?
任何和所有的帮助都是值得感激的。
你好,西蒙
发布于 2011-07-30 04:35:21
试试这个正则表达式:
::image-gallery::\s+::title::(.*?)::/title::.*?::gallery-entry::(.*?)::/gallery-entry::\s+::/image-gallery::发布于 2011-07-30 15:06:07
在模拟-regex-捕获-组-在mysql中中,似乎没有一种方法可以轻松地用mysql中的regex捕获组。原因是MySQL本机不支持正则表达式中的捕获组。如果需要该功能,可以使用服务器端扩展(如预浸 )将该功能添加到MySQL中。
最简单的方法是使用SQL提取整个列,然后用另一种语言(例如php)进行文本匹配。
在我的测试中,肯布里顿的regex没有工作,但是在此基础上,下面的regex对您的测试数据起了作用:
::image-gallery::\s+::title::(.*?)::\/title::\s+(?:.*\s+)*::gallery-entry::(.*?)::\/gallery-entry::\s+::\/image-gallery::https://stackoverflow.com/questions/6071008
复制相似问题