我尝试从字符串'{“ travelzoo_hotel_name”:“ Gradientate Minneapolis”,“ travelzoo_hotel_id”:“ 223”,“ city”:“ 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_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

在您的正则表达式中,非捕获组模式仍会匹配并附加到匹配值。 “非捕获”仅表示没有单独的内存缓冲区分配给使用分组构造捕获的文本。因此,您可以使用'(?<="city":")[^"]+'模式修复它,其中(?<="city":")是与"city":"匹配但不将其放入匹配值的正向后看。您输出中仅有的文本是与[^"]+匹配的文本,除了"以外还有1个以上的字符。

关于mysql - regexp mysql组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50639022/

10-15 09:19