【问题标题】:get value between [ ] and value outside of [ ]through regular expression通过正则表达式获取[]和[]之外的值之间的值
【发布时间】:2012-08-15 12:50:36
【问题描述】:

我有这样的字符串:

var = This a string, [This is another string]

我想让它们在 PLSQL 中分解成这样的东西

var1 = This is string
var2 = This is another string

如果是这样的,则不应包含逗号:

, [

基本上这决定是否有另一个字符串。

我该怎么做?

提前致谢:-)

【问题讨论】:

    标签: sql regex string plsql


    【解决方案1】:

    您可以使用SUBSTRINSTR 的组合来拆分字符串。例如,要获取第一个字符串,您可以使用以下代码:

    SELECT NVL(SUBSTR(var, 1, INSTR(var, ',') - 1), var)
    FROM dual;
    

    即找到分隔符的索引(INSTR(var, ',')),然后使用SUBSTR 捕获该索引之前的所有内容。同样适用于第二个字符串。

    【讨论】:

    • 感谢您的快速回复,如果没有“第二个字符串”怎么办?那么结果将为空。
    • 正确,您可以用NVL 包装该表达式,并在这种情况下使用原始字符串。我已经编辑了我的答案以反映这一点。
    • 谢谢,这行得通。但是,为了获得第二个字符串,我使用了以下内容: select nvl(substr(var instr(var, '[') +1, instr(var, ']') -1), var) FROM dual 现在的问题是我在第二个字符串的最后得到 [ 字符
    【解决方案2】:

    我认为这会给你想要的,尽管我对你的解析要求不是 100% 清楚。

    var1 := regexp_replace( var, '^([^[,]*).*$', '\1')
    var2 := regexp_replace( var, '^[^[]*(\[([^]]*)\])?.*$', '\2')
    

    这是一个测试正则表达式函数的sql fiddle

    我也不确定正则表达式解决方案与其他方法的性能。

    【讨论】:

      猜你喜欢
      • 2017-02-04
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 2010-09-15
      相关资源
      最近更新 更多