代码之家  ›  专栏  ›  技术社区  ›  Derek Adair

通过regex解析mysql中的结果

  •  1
  • Derek Adair  · 技术社区  · 15 年前

    我对mysql的regex支持的功能有点困惑,我还没有找到一个关于如何将结果与regex分开的可靠示例。 within an sql statement .

    例子:

    我怎么能从一个看起来像…

    +-------------------------+
    |Emails                   |
    |-------------------------|
    |Some.email@yourDomain.com|
    +-------------------------+
    

    然后通过一个看起来像…

    +------------------------------+
    |Username   |  Domain    | TLD |
    |-----------|------------|-----|
    |some.email | yourdomain | com |
    +------------------------------+
    
    2 回复  |  直到 12 年前
        1
  •  8
  •   Chad Birch    15 年前

    mysql没有内置的功能来满足您的要求。通过定义一些新的函数是可能的,但是用任何编程语言访问数据库都可能更容易。

    不过,对于像电子邮件地址这样简单的东西,您根本不需要使用正则表达式,您可以使用 SUBSTRING_INDEX() function ,如:

    SELECT
        SUBSTRING_INDEX(email, '@', 1) AS Username,
        SUBSTRING_INDEX(SUBSTR(email, LOCATE('@', email)), '.', 1) AS Domain,
        SUBSTRING_INDEX(email, '.', -1) AS TLD
    FROM users;
    

    换句话说,就是:

    • username=第一个“@”之前的所有内容
    • 域=第一个“@”和第一个“.”之间的所有内容
    • TLD=最后一个“.”之后的所有内容。
        2
  •  0
  •   Andrew Barber Eric Lafortune    12 年前

    你也可以试试,

    select substring_index(email, '@', 1) username
           ,substring_index(substring_index(email, '@', -1), '.',1) domain
           ,substring_index(email, '.', -1) tld
    from 
    ( select 'Some.email@yourDomain.com' email ) E
    

    仅使用子字符串索引。第一个子串在“@”的左边,第三个子串在“@”的右边,然后由第二个子串解析得到域,最后一个子串在“.”的右边。