Короче говоря, давайте предположим, что у меня есть поле в столбце «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";
Что нужно сделать / не работает:
Мне нужно, чтобы СЛЕДУЮЩИЙ происходил «; ПОСЛЕ предыдущей найденной строки. Это вообще возможно? Или есть какой-то другой обходной путь? Я был бы рад некоторой помощи.
Следующее регулярное выражение даст вам все, от первой двоеточия до первой точки с запятой:
\:([^;]*)
Упростим ваш запрос следующим образом:
SELECT `whyisthisalist` REGEXP '\:([^;]*)'
FROM `table`
MySQL REGEX документы
MySQL Pattern Matching
Вы также можете использовать взгляд впереди и взгляд назад для регулярного выражения:
(?<=example1:)(.+?)(?=\;)
Других решений пока нет …