代码之家  ›  专栏  ›  技术社区  ›  Blagovest Buyukliev

有没有一种方法可以从MySQL中的正则表达式中提取子匹配?

  •  3
  • Blagovest Buyukliev  · 技术社区  · 15 年前

    我意识到 RLIKE REGEX 操作员,但他们似乎不能用于此目的。

    是否有一个函数或运算符可以帮助我拆分文本字段并将其选为两个或多个单独的字段:

    SELECT $1 as `field_a`, $2 as `field_b` FROM `table` WHERE `field` RLIKE '^(.+):(.+)$';
    

    我正在编写一个日志分析器,所以在SQL中不需要额外的文本处理就可以很方便地完成这项工作。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Ike Walker    15 年前

    所以您只想在第一次出现“:”时拆分字符串?

    在MySQL中有几种实现这一点的方法。

    用你的例子,这里有两种方法可以让我不去想。希望他们能对你有所帮助:

    select substr(`field`,1,instr(`field`,':')-1) as `field_a`,
      substr(`field`,instr(`field`,':')+1) as `field_b` 
    FROM `table` 
    WHERE `field` RLIKE '^(.+):(.+)$';
    
    select left(`field`,instr(`field`,':')-1) as `field_a`,
      right(`field`,length(`field`)-instr(`field`,':')) as `field_b` 
    FROM `table` 
    WHERE `field` RLIKE '^(.+):(.+)$';