模式匹配相同的通配符

时间:2015-03-13 13:06:27

标签: postgresql pattern-matching

我正在使用PostgreSQL并想知道你是否可以使用通配符保留其值。

例如说我有

select * from tableOne where field like ‘_DEF_’;

有没有办法让第一个和最后一个通配符成为完全相同的字符?

所以匹配结果的示例可能是:ADEFA或ZDEFZ。

2 个答案:

答案 0 :(得分:4)

您可以使用带有反向引用的正则表达式:

select * 
from some_table
where some_column ~* '^(.)DEF(\1)$'

^(.)DEF(\1)$表示:开头的一些字符跟在DEF之后,第一个字符必须出现在字符串的末尾。

()定义一个组,\1引用第一个组(在此示例中是输入序列中的第一个字符)

SQLFiddle示例:http://sqlfiddle.com/#!15/d4c4d/1

答案 1 :(得分:0)

使用正则表达式:

with test as (
    select 'xABa' as foo
    union select 'xABx'
    union select 'xJBx'
)
select * from test
where foo ~* E'^(.)AB\\1$'

输出:

 foo  
------
 xABx
(1 row)