我尝试从字符串'{“travelzoo_hotel_name”获取城市名称:“研究生明尼阿波利斯”,“travelzoo_hotel_id”:“223”,“city”:“明尼阿波利斯“,”country“:”USA“,”sales_manager“:”Stephen Conti“}' 我试试这个正则表达式:
SELECT REGEXP_SUBSTR('{\"travelzoo_hotel_name\":\"Graduate Minneapolis\",\"travelzoo_hotel_id\":\"223\",\"city\":\"Minneapolis\",\"country\":\"USA\",\"sales_manager\":\"Stephen Conti\"}'
,'(?:.city...)([[:alnum:]]+)');
我有:'"city":"Minneapolis'
我只需要城市名称:Minneapolis
。
如何在查询中使用组?
答案 0 :(得分:0)
我假设您使用的是MySQL 8.x that uses ICU regex expressions。
看起来您要处理的字符串是JSON。您可以使用JSON_EXTRACT
JSON_UNQUOTE
和'$.city'
作为JSON路径:
JSON_UNQUOTE(JSON_EXTRACT('{"travelzoo_hotel_name":"Graduate Minneapolis","travelzoo_hotel_id":"223","city":"Minneapolis","country":"USA","sales_manager":"Stephen Conti"}', '$.city'))
将返回Minneapolis
。
在正则表达式中,非捕获组模式仍然匹配并附加到匹配值。 &#34;非捕获&#34;仅表示没有单独的内存缓冲区分配给使用分组构造捕获的文本。因此,您可以使用'(?<="city":")[^"]+'
模式对其进行修复,其中(?<="city":")
是匹配"city":"
的正向后视,但不会将其置于匹配值中。输出中唯一的文字是与[^"]+
匹配的文字,除"
以外的1个字符。