【问题标题】:Break string based on particular string match根据特定的字符串匹配中断字符串
【发布时间】:2011-10-02 10:58:37
【问题描述】:

我在 Oracle 中有以下字符串作为一个连续的行,而不是将这些信息显示为一个连续的字符串,实际上我想在出现“:F”和“:L”之前附加一个回车符/换行符”,这也需要删除 F 和 L 之前的“:”

所以当前字符串:

F:AA BB:F:BB CC dd:F:ZZ Xx Y:L:Hello:F:Goodbye

新显示的字符串:

F:AA BB
F:BB CC dd
F:ZZ Xx Y
L:Hello
F:Goodbye

试图在 Oracle pl/sql 中将其作为一个简洁的函数来实现,这样我就可以传入当前字符串并通过回车/换行符取回新字符串。

【问题讨论】:

    标签: regex oracle plsql oracle10g


    【解决方案1】:

    我认为您不需要正则表达式。简单的替换应该可以解决问题。

    new_val := REPLACE( REPLACE( string_val, ':F:', CHR(10)||'F:' )
                      , ':L:', CHR(10)||'L:' );
    

    这给了 unix 风格的新行。如果你想要 Windows 换行符,那么你需要使用 CHR(13)||CHR(10) 而不仅仅是 CHR(10)

    您也可以在查询中使用它。

    【讨论】:

    • Perfecto @Sodved - 我只需要添加 CHR(13)||CHR(10) 来满足我的要求。干得好。谢谢。
    【解决方案2】:

    只是以regular expression replace 的方式抛出:

    with TestData as(
    select 'F:AA BB:F:BB CC dd:F:ZZ Xx Y:L:Hello:F:Goodbye' text from dual 
    )
    
    select testData.text , 
           REGEXP_REPLACE(testData.text, '(:)([F|L]+:)',CHR(13)||CHR(10) || '\2') REG_REP
      from testData
    
    ;
    TEXT                                           REG_REP                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
    ---------------------------------------------- -----------
    F:AA BB:F:BB CC dd:F:ZZ Xx Y:L:Hello:F:Goodbye F:AA BB                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                                                   F:BB CC dd                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                   F:ZZ Xx Y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                   L:Hello                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                                                   F:Goodbye  
    

     REGEXP_REPLACE(testData.text, '(:)([F|L]+:)',CHR(13)||CHR(10) || '\2')
    

    用\GroupPosition#替换可能被引用的()标记分组

    (:)([F|L]+:)
    

    几乎是说寻找一个 : 后跟 F: 或 L:

    CHR(13)||CHR(10) || '\2'
    

    然后将找到的文本替换为“CHR(13)||CHR(10) ||” + 第二组

    【讨论】:

      【解决方案3】:

      使用正则表达式:

      select REGEXP_REPLACE('F:AA BB:F:BB CC dd:F:ZZ Xx Y:L:Hello:F:Goodbye',
                             (\:+)(F|L{1})(\:+)',
                             chr(13)||chr(10)||'\2\3')
      from dual;
      

      更好的匹配模式。

      【讨论】:

        猜你喜欢
        • 2017-08-02
        • 2019-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-06
        相关资源
        最近更新 更多