首页 > 解决方案 > 使用 REGEX 从 mySQL 中的表列中选择字符串模式

问题描述

我的数据库中有一些列,其中条目采用以下形式:

["some text - more text & text","some other text - more text & text"]

那时,在数组中包含字符串是有意义的,但我现在想更新这些列,在这些列中我只有字符串的数组,以获取数组的第零个索引内的文本。

所以在这种情况下捕获:

some text - more text & text

会很可爱。我尝试了许多正则表达式来省略[ "或尝试捕获""like中的内容,"(.*?)\"但我在 mySql 查询中遇到语法错误,因为它不支持延迟捕获。

我知道之前的正则表达式仍然会选择类似的值,"some text - more text & text"但认为至少我会更接近目标,然后将字符串修剪为子字符串以省略第一个和最后一个索引所在的""位置。有什么帮助吗?

标签: mysqlsqlregexstring

解决方案


要获得第一个嵌套值,一种解决方案是使用REGEXP_REPLACE()删除字符串中不需要的部分。

我建议使用以下正则表达式:(^\\[)|(")|(,.*). 基本上这将匹配:

  • 开口支架
  • 或双引号
  • 或第一个逗号后的所有内容

考虑:

SELECT REGEXP_REPLACE(
    '["some text - more text & text","some other text - more text & text"]',
  '(^\\[)|(")|(,.*)',
  ''
 ) new_value;

DB Fiddle 上的演示

| new_value                    |
| ---------------------------- |
| some text - more text & text |

推荐阅读