在存储过程中使用正则表达式提取字符串

时间:2016-03-22 19:12:50

标签: regex database string postgresql

我在javascript中有一个正则表达式表示正常。

var re = /^([0-9]?[A-Z]+?)\s*(?:FM)?[FGHJKMNQUVXZ](?:[02]0)?[12]?[0-9]/i; 
var str = 'RVBM2016';
var m;

if ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    // View your result using the m-variable.
    // eg m[0] etc.
}

现在我尝试在postgres中的存储过程中重用相同的表达式。以下是我的尝试方法:

 select regexp_replace('BLM2016', 
       E'/^([0-9]?[A-Z]+?)\s*(?:FM)?[FGHJKMNQUVXZ](?:[02]0)?[12]?[0-9]/i', '', 'g') 

这应仅返回BL。对于RVBM2016,它应该返回RVB等等..

但现在它对输入文本没有影响。有任何语法错误吗?

1 个答案:

答案 0 :(得分:0)

我使用了错误的方法从表达式中提取字符串。如果有人有兴趣,正确的版本如下:

select (regexp_matches('BLM2016', '([0-9]?[A-Z]+?)\s*(?:FM)?[FGHJKMNQUVXZ](?:[02]0)?[12]?[0-9]', 'gi'))[1]