正则表达式 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
。
如何在查询中使用组?
我假设您正在使用 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+ 个字符
我尝试从字符串 '{"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
。
如何在查询中使用组?
我假设您正在使用 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":"
匹配但不将其放入匹配值的正后视。输出中唯一的文本是与 [^"]+
匹配的文本,除 "
.