在并不总是存在的两个字符串之间的列中定位特定字符串?
Locating a specific string in a column between two strings which are not always there?
长话短说,假设我在 'table' 中名为 'whyisthisalist' 的列中有一个字段,其中包含:
{example1:"hereistext";example2:"ohlookmoretext";example3:"isthisevenreal"}
如果 example2 并不总是存在,我将如何提取 example1 和 example2 之间的文本,因为它也可能看起来像这样:
{example1:"hereistext";example7:"ohlookmoretext"}
如果一切顺利的话应该return"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";
需要什么done/doesn不起作用:
我需要让 NEXT 出现 "; 在上一个定位的字符串之后。这甚至可能吗?或者有其他解决方法吗?我很乐意提供一些帮助。
以下正则表达式将为您提供从第一个冒号到第一个分号的所有内容:
\:([^;]*)
像这样简化您的查询:
SELECT `whyisthisalist` REGEXP '\:([^;]*)'
FROM `table`
MySQL REGEX docs
MySQL Pattern Matching
您也可以使用 lookahead's and lookbehind's 作为正则表达式:
(?<=example1:)(.+?)(?=\;)
长话短说,假设我在 'table' 中名为 'whyisthisalist' 的列中有一个字段,其中包含:
{example1:"hereistext";example2:"ohlookmoretext";example3:"isthisevenreal"}
如果 example2 并不总是存在,我将如何提取 example1 和 example2 之间的文本,因为它也可能看起来像这样:
{example1:"hereistext";example7:"ohlookmoretext"}
如果一切顺利的话应该return"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";
需要什么done/doesn不起作用: 我需要让 NEXT 出现 "; 在上一个定位的字符串之后。这甚至可能吗?或者有其他解决方法吗?我很乐意提供一些帮助。
以下正则表达式将为您提供从第一个冒号到第一个分号的所有内容:
\:([^;]*)
像这样简化您的查询:
SELECT `whyisthisalist` REGEXP '\:([^;]*)'
FROM `table`
MySQL REGEX docs
MySQL Pattern Matching
您也可以使用 lookahead's and lookbehind's 作为正则表达式:
(?<=example1:)(.+?)(?=\;)