具有相同通配符的模式匹配

len*_*hun 3 postgresql pattern-matching

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

\n\n

例如说我有

\n\n
select * from tableOne where field like \xe2\x80\x98_DEF_\xe2\x80\x99;\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

因此,匹配结果示例可以是:ADEFA 或 ZDEFZ。

\n

小智 5

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

select * 
from some_table
where some_column ~* '^(.)DEF(\1)$'
Run Code Online (Sandbox Code Playgroud)

^(.)DEF(\1)$意思是:开头的某个字符后面DEF跟着的第一个字符必须出现在字符串的末尾。

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

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