gpt4 book ai didi

mysql - 正则表达式不适用于单/双引号

转载 作者:行者123 更新时间:2023-11-29 06:31:20 29 4
gpt4 key购买 nike

我有一个名为 myfield 的字段,其中包含以下字符串:

{'Content-Language': 'en', 'X-Frame-Options': 'SAMEORIGIN', 'X-Generator': 'Drupal 7 (http://drupal.org)', 'Link': '<https://01.org/node>; rel="shortlink"', 'Some-Header-Key': 'max-age=31; addSomething', 'Content-Encoding': 'gzip'}

我想捕获'Some-Header-Key': 'max-age=31; addSomething' 其中:1) 'Some-Header-Key'max-age 是应始终存在的固定值。

2) addSomething 是可选的。

3) 双冒号和等号之间可以有一个或多个空格

4) 一般形式为 'key': 'value',带单引号或双引号。

5) ([^""|'])* 表示:零个或多个不是单引号或双引号的字符。这是为了捕获 addSomething

我写了这个查询:

select myfield
from mytable
where mycol regexp "('|"")Some-Header-Key('|"")\s*:\s*('|"")([^""|'])*max-age\s*=\s*[0-9]+([^""|'])*('|"")";

但它没有返回任何东西!尽管 myfield 包含上面的示例字符串。

当我将字段值复制到外部文本文件并在 grep 中运行正则表达式时,正则表达式正确捕获了字符串。

MySQL 出了什么问题?我在 Ubuntu 18.04 中使用 MySQL Workbench 8.0。

最佳答案

您的问题出在正则表达式中的 \s 。 MySQL 8 之前的版本不支持此表示法,您需要使用字符类 [:blank:] 代替,即

where mycol regexp "('|"")Some-Header-Key('|"")[[:blank:]]*:[[:blank:]]*('|"")([^""|'])*max-age[[:blank:]]*=[[:blank:]]*[0-9]+([^""|'])*('|"")"

在 MySQL 8 中,您可以使用 \s 但需要对反斜杠进行转义,因为 MySQL 在字符串中使用 C 风格的转义语法,因此 \s 只是转换为s。因此,将 \s 更改为 \\s 它应该可以工作:

where mycol regexp "('|"")Some-Header-Key('|"")\\s*:\\s*('|"")([^""|'])*max-age\\s*=\\s*[0-9]+([^""|'])*('|"")"

Demo on dbfiddle

关于mysql - 正则表达式不适用于单/双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56053160/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com