正则表达式 mysql 组

regexp mysql group

我尝试从字符串 '{"travelzoo_hotel_name":"Graduate Minneapolis","travelzoo_hotel_id":"223",[=28 中获取 城市名称 =]:"Minneapolis","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 请帮助我

我假设您正在使用 MySQL 8.x that uses ICU regex expressions

看起来您要处理的字符串是JSON。您可以使用 JSON_EXTRACT with 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'))

将 return Minneapolis.

在您的正则表达式中,非捕获组模式仍然匹配并附加到匹配值。 "Non-capturing" 仅表示没有单独的内存缓冲区分配给使用分组构造捕获的文本。因此,您可以使用 '(?<="city":")[^"]+' 模式修复它,其中 (?<="city":") 是与 "city":" 匹配但不将其放入匹配值的正后视。输出中唯一的文本是与 [^"]+ 匹配的文本,除 ".

之外的 1+ 个字符