2015-04-07 55 views
0

我想提取,regexp_matches功能不给出任何结果

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查询中的问题。

请帮忙。

+0

把里面的格局'()'' – hjpotter92

+1

\ B'是[快捷方式 “退格”(http://www.postgresql.org/docs/current /static/functions-matching.html#POSIX-CHARACTER-ENTRY-ESCAPES-TABLE) - 我不认为这是你想要的。我也不认为你需要逃避范围运算符外的'-'('[..]')。我认为'\ w {1,4} - \ w {1,4} - \ w {1,4} - \ w {1,4} - \ w {1,12}''应该这样做 –

+1

试试'[[:<:]]'和'[[:>:]]'而不是第一个和最后一个'\ b'。请参阅http://www.postgresql.org/docs/8.3/interactive/functions-matching.html#POSIX-BRACKET-EXPRESSIONS。 –

回答

2

Accoding到PostgreSQL regex documentation,你需要使用\m一个词的开始,\M的字边界结束。 \b表示退格。所以,你的正则表达式应该像LOOL:

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

尝试此查询:

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

相关问题