2014-10-28 7 views
0

Я пытаюсь преобразовать регулярное выражение, которое отлично работает в PHP для MySQL. MySQL не позволяет отрицательный смотреть вперед (?!) так что мне нужно решение или обходной путьRegex Search with delimiters in and Mysql

Мои данные колонки DB представляет собой строку, как это:

Название: Книга Title¬ # ¬description: Книга Description¬ # ¬Price: $ 10,57

регулярное выражение можно использовать в PHP будет

(^ | ¬ ¬ #) название:. (((?! ¬ # ¬)) * Книга ((?! ¬ ¬ #).) *)

но в MySQL я борется. У кого-нибудь есть какие-либо советы или предложения

+0

Не можете ли вы просто разбить на '¬ # ¬', а затем разбить на': '? – nhahtdh

+0

Как вы просили совета _any_, мой вопрос должен был сначала нормализовать ваши данные. Наличие трех разных полей, сложенных вместе в одном столбце, выглядит странно. – georg

+0

как бы вы это сделали с помощью запроса mysql? – dripster82

ответ

0

Решение было простым, как только я подумал о том, разделив ее как nhahtdh предложил.

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

У MySQL нет способа применить REGEX к содержимому col в предложении SELECT.

Вы можете использовать функцию 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