2011-05-20 85 views
0

可能重复:
Simulating regex capture groups in mysql使用正则表达式在“标签”中提取MySQL数据?

好日子,

我存储在MySQL表多行数据。一个典型的价值可能是这个样子:

::image-gallery:: 
::gallery-entry::images/01.jpg::/gallery-entry:: 
::/image-gallery:: 

有没有一种方法 - 用正则表达式,我可以一)提取第一行术语图片库的方式(它可以是任何的短语,而不仅仅是图像库),然后提取中心线作为两个单独的这样:

库条目,然后图像/ 01.JPG

可能有::库条目的许多线::值,它们也可以被称为任何东西。更完整的示例将是:

::image-gallery:: 
::title::MY GALLERY::/title:: 
::date::2011-05-20::/date:: 
::gallery-entry::images/01.jpg::/gallery-entry:: 
::/image-gallery:: 

在本质上我想这样的信息:在上述情况下,第一行和最后一行的内容类型(图像库)。然后我需要标题作为关键值样式对,所以标题作为关键字,我的相册作为值。然后,随后,我需要所有的字段行(gallery-entry)作为关键值对。

这是一个迁移脚本,其中旧系统的数据将以不同语法迁移到新系统。

如果MySQL select语句不起作用,用PHP脚本解析数据提取结果会更容易吗?

任何和所有的帮助总是赞赏。

亲切的问候, 西蒙

+1

这些例子在表中代表单个行?我猜想一个仅用于sql的解决方案将很难实现。从快速查看MySQL中的正则表达式支持(http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp),我认为PHP或任何其他您喜欢的语言将是一种更简单的方法。 – 2011-05-20 12:00:24

+0

你好,你可能需要对数据的可能结构更加具体:做标签自己包含多个结果集行('image-gallery')吗? – collapsar 2011-05-20 14:31:37

+0

@paul W - 对不起,这样的延迟响应。但事实上,我最终用PHP的preg_match()函数进行了一些简单的模式匹配。感谢您的反馈。 – SimonDowdles 2011-07-07 14:15:57

回答

0

试试这个正则表达式:

::image-gallery::\s+::title::(.*?)::/title::.*?::gallery-entry::(.*?)::/gallery-entry::\s+::/image-gallery:: 
  1. 使用单行模式(/模式/秒),所以*?咀嚼换行符。
  2. 你的键值对将是: 标题:$ 1(匹配第1组) 画廊入境:$ 2(匹配组2)
0

simulating-regex-capture-groups-in-mysql似乎有没有一种方法来轻松捕获在mysql中使用正则表达式组。原因是MySQL本身不支持正则表达式中的捕获组。如果你想要这个功能,你可以使用像lib_mysqludf_preg这样的服务器端扩展来将这个功能添加到MySQL中。

最简单的方法是用SQL提取整列,然后用另一种语言(如php)进行文本匹配。

在我的测试kenbritton的正则表达式没有工作,但建筑关闭它下面的正则表达式上的测试数据的工作:

::image-gallery::\s+::title::(.*?)::\/title::\s+(?:.*\s+)*::gallery-entry::(.*?)::\/gallery-entry::\s+::\/image-gallery::