regexp mysql组

tv6aics1  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(441)

我尝试从字符串“{”travelzoo\u hotel\u name“:”graduate minneapolis“,”travelzoo\u hotel\u id“:”223“,”city“:”minneapolis“,”country“:”usa“,”sales\u manager“:”stephen conti“}中获取城市的名称,我尝试以下regexp:

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 . 如何在查询中使用组?
我在regex101中的例子请帮助我

ocebsuys

ocebsuys1#

我假设您使用的是mysql 8.x,它使用icu regex表达式。
看起来您要处理的字符串是json。你可以用 JSON_EXTRACTJSON_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 .
在regex中,非捕获组模式仍然是匹配的,并附加到匹配值中。”非捕获”仅意味着没有单独的内存缓冲区分配给使用分组结构捕获的文本。所以,你可以用 '(?<="city":")[^"]+' 图案在哪里 (?<="city":") 是一个积极的回顾 "city":" 但不会将其放入匹配值中。输出中只有与匹配的文本 [^"]+ ,1+个字符,除 " .

相关问题