我尝试从字符串'{“ 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_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
。在您的正则表达式中,非捕获组模式仍会匹配并附加到匹配值。 “非捕获”仅表示没有单独的内存缓冲区分配给使用分组构造捕获的文本。因此,您可以使用
'(?<="city":")[^"]+'
模式修复它,其中(?<="city":")
是与"city":"
匹配但不将其放入匹配值的正向后看。您输出中仅有的文本是与[^"]+
匹配的文本,除了"
以外还有1个以上的字符。关于mysql - regexp mysql组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50639022/