Нахождение конкретной строки в столбце между двумя строками, которые не всегда есть?

Короче говоря, давайте предположим, что у меня есть поле в столбце «Whyisthisalist» из «таблицы», которое содержит:

{example1:"hereistext";example2:"ohlookmoretext";example3:"isthisevenreal"}

Как мне извлечь текст между example1 и example2, учитывая, что example2 не всегда есть, потому что он также может выглядеть так:

{example1:"hereistext";example7:"ohlookmoretext"}

Он должен вернуть «hereistext», если все идет хорошо.

Моя идея до сих пор:

$sql = "SELECT SUBSTRING(LEFT(whyisthisalist, LOCATE('\";', whyisthisalist) +0), LOCATE('example1:\"', whyisthisalist) +0, 100)
FROM table
WHERE LOCATE('\";', whyisthisalist) > 0
AND LOCATE('example1:\"', whyisthisalist) > 0 ORDER BY id DESC LIMIT 1";

Что нужно сделать / не работает:
Мне нужно, чтобы СЛЕДУЮЩИЙ происходил «; ПОСЛЕ предыдущей найденной строки. Это вообще возможно? Или есть какой-то другой обходной путь? Я был бы рад некоторой помощи.

2

Решение

Следующее регулярное выражение даст вам все, от первой двоеточия до первой точки с запятой:

\:([^;]*)

Упростим ваш запрос следующим образом:

SELECT `whyisthisalist` REGEXP '\:([^;]*)'
FROM `table`

MySQL REGEX документы
MySQL Pattern Matching

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

(?<=example1:)(.+?)(?=\;)
3

Другие решения

Других решений пока нет …