美文网首页
正则案例四:清空()里面的内容

正则案例四:清空()里面的内容

作者: 只是甲 | 来源:发表于2021-06-30 18:08 被阅读0次

    一.需求

    今天在论坛上看到有人提了一个正则相关的问题,刚好有时间,就给他提供了一个解决方案。

    需求如下:
    字符串:'我爱(xxx)中华(qq)人民(aac啊)共和国'
    想达到的效果,凡是()中的内容都不需要了,包括()本身,以上字符串希望返回结果:我爱中华人民共和国。

    二.解决方案

    2.1 Oracle解决方案

    首先想到的是regexp_replace进行替换,题目意思已经很明白,是要删除()及()里面的内容。

    代码:

    with tmp1 as
    (select '我爱(xxx)中华(qq)人民(aac啊)共和国' str from dual)
    select regexp_replace(str,'\(.*?\)','') str_new
      from tmp1
    

    测试记录:

    SQL> with tmp1 as
      2  (select '我爱(xxx)中华(qq)人民(aac啊)共和国' str from dual)
      3  select regexp_replace(str,'\(.*?\)','') str_new
      4    from tmp1
      5  /
    STR_NEW
    ------------------
    我爱中华人民共和国
    
    SQL> 
    

    2.2 MySQL解决方案

    我把Oracle的解决方案贴到mysql里面执行,结果字符串没有任何变化。

    代码:

    with tmp1 as
    (select '我爱(xxx)中华(qq)人民(aac啊)共和国' str from dual)
    select regexp_replace(str,'\(.*?\)','') str_new
      from tmp1
    

    测试记录:

    mysql> with tmp1 as
        -> (select '我爱(xxx)中华(qq)人民(aac啊)共和国' str from dual)
        -> select regexp_replace(str,'\(.*?\)','') str_new
        ->   from tmp1;
    +----------------------------------------------+
    | str_new                                      |
    +----------------------------------------------+
    | 我爱(xxx)中华(qq)人民(aac啊)共和国           |
    +----------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql>
    

    然后翻阅了下正则表达式的文档:
    [[:punct:]] 任何标点符号。

    于是用这个试试,最终问题得到解决。
    代码:

    select regexp_replace(str,'[[:punct:]].*?[[:punct:]]','') str_new
      from (select '我爱(xxx)中华(qq)人民(aac啊)共和国' str from dual) tmp1
    

    测试记录:

    mysql> select regexp_replace(str,'[[:punct:]].*?[[:punct:]]','') str_new
        ->   from (select '我爱(xxx)中华(qq)人民(aac啊)共和国' str from dual) tmp1;
    +-----------------------------+
    | str_new                     |
    +-----------------------------+
    | 我爱中华人民共和国          |
    +-----------------------------+
    1 row in set (0.00 sec)
    

    特别注意:
    [[:punct:]] 任何标点符号,所以即便不是(),是其它标点符号,也是会被清空。

    代码:

    select regexp_replace(str,'[[:punct:]].*?[[:punct:]]','') str_new
      from (select '我爱(xxx?中华,qq)人民!aac啊)共和国' str from dual) tmp1
    

    测试记录:

    mysql> select regexp_replace(str,'[[:punct:]].*?[[:punct:]]','') str_new
        ->   from (select '我爱(xxx?中华,qq)人民!aac啊)共和国' str from dual) tmp1;
    +-----------------------------+
    | str_new                     |
    +-----------------------------+
    | 我爱中华人民共和国          |
    +-----------------------------+
    1 row in set (0.00 sec)
    

    相关文章

      网友评论

          本文标题:正则案例四:清空()里面的内容

          本文链接:https://www.haomeiwen.com/subject/rlnrultx.html