在两列并不总是存在的字符串中的列中查找特定字符串?

时间:2016-02-05 17:01:15

标签: php mysql contao

长话短说,我们假设我在一个专栏中有一个字段,名为“为什么是这样的主义者”。来自' table'其中包含:

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

需要做什么/不起作用: 我需要得到NEXT出现&#34 ;;在之前找到的字符串之后。这甚至可能吗?或者还有其他解决方法吗?我很乐意帮忙。

1 个答案:

答案 0 :(得分:3)

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

\:([^;]*)

简化您的查询:

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

MySQL REGEX docs
MySQL Pattern Matching

您还可以使用lookahead's and lookbehind's作为正则表达式:

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