regexp mysql组

时间:2018-06-01 08:18:50

标签: mysql regex regexp-substr

我尝试从字符串'{“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。 如何在查询中使用组?

My example in regex101 请帮帮我

1 个答案:

答案 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个字符。