regexp_matches函数不会给出任何结果

时间:2015-04-07 12:10:07

标签: regex postgresql

我想提取,

  

002267b4-ad06-11e4-89ca-59f94b49bbc0

来自另一个字符串的上述字符串。我试过的是,

select regexp_matches('class 1 type 1 cat 1 002267b4-ad06-11e4-89ca-59f94b49bbc0' , '\b\w{1,8}\-\w{1,4}\-\w{1,4}\-\w{1,4}\-\w{1,12}\b' ) 

这不会给出任何结果,但是当我从在线工具检查正则表达式时,它会选择我想要的正确字符串。必须是postgresql查询中的问题。

请帮忙。

2 个答案:

答案 0 :(得分:2)

根据PostgreSQL regex documentation,您需要使用\m作为单词的开头,\M作为单词边界的结尾。 \b表示退格。所以,你的正则表达式应该如下:

select regexp_matches('class 1 type 1 cat 1 002267b4-ad06-11e4-89ca-59f94b49bbc0' , '\m\w{1,8}\-\w{1,4}\-\w{1,4}\-\w{1,4}\-\w{1,12}\M' )

答案 1 :(得分:1)

尝试此查询:

SELECT regexp_matches(
  'class 1 type 1 cat 1 002267b4-ad06-11e4-89ca-59f94b49bbc0',
  '[^-]{1,8}-[^-]{1,4}-[^-]{1,4}-[^-]{1,4}-[^-]{1,12}'
);

这可以是Fiddel around with