正则表达式搜索分隔符和Mysql

时间:2014-10-28 10:19:42

标签: mysql regex

我正在尝试将在PHP中运行良好的正则表达式转换为MySQL。 MySQL不允许负面预测(?!)所以我需要一个解决方案或解决方法

我的数据库列数据是这样的字符串:

  

标题:书名 - #¬描述:书籍描述 - #¬价格:$ 10.57

我可以在PHP中使用的正则表达式

  

(^ |¬¬#)标题:(((?!¬¬#))*书((¬¬#))*?!)

但在MySQL中我很挣扎。任何人都有任何建议或意见

2 个答案:

答案 0 :(得分:0)

MySQL没有办法将REGEX应用于SELECT子句中的col的内容。

在这种情况下,您可以使用SUBSTRING功能提取您的内容。

SELECT 
      SUBSTRING_INDEX(
        LEFT( content, LOCATE('?#?description', content)-1 ), 'title:', -1) AS title,
      SUBSTRING_INDEX(
        LEFT( content, LOCATE('?#?Price', content)-1 ), 'description:', -1) AS description,
      SUBSTRING_INDEX(
        RIGHT( content, LOCATE('?#?Price', content)-1 ), 'Price:', -1) AS price
FROM test_table

SQLFiddle

http://sqlfiddle.com/#!2/04e83/1

答案 1 :(得分:0)

一旦我考虑像nhahtdh建议的那样拆分它,解决方案很简单。

select 
  SUBSTRING_INDEX(SUBSTR(table.data, LOCATE('title:', table.data)+6), '¬#¬', 1) regexp '[[:<:]]Book[[:>:]]' AS hasResult
from 
  table;