2

长话短说,假设我在“table”中名为“whyisthisalist”的列中有一个字段,其中包含:

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

我将如何提取 example1 和 example2 之间的文本,因为 example2 并不总是存在,因为它也可能看起来像这样:

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

如果一切顺利,它应该返回“heeistext”。

到目前为止我的想法:

$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";

需要做什么/不起作用:我需要在上一个找到的字符串之后出现 NEXT 。这甚至可能吗?或者还有其他解决方法吗?我会很高兴得到一些帮助。

4

1 回答 1

2

以下正则表达式将为您提供从第一个冒号到第一个分号的所有内容:

\:([^;]*)

像这样简化您的查询:

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

MySQL 正则表达式文档
MySQL 模式匹配

您还可以对正则表达式使用前瞻和后瞻

(?<=example1:)(.+?)(?=\;)
于 2016-02-05T17:31:33.460 回答