2014-01-23 107 views
2

我有以下查詢:postgresql中regexp Q ... E的等價物是什麼?

SELECT 
    field 
FROM 
    myTable 
WHERE 
    field ~ '\\Qprefix[\\E.+' 

它不會找到像prefix[foo]值。

如何更換\Q..\E

+1

究竟做'\ Q'嗎? –

+0

@a_horse_with_no_name _「許多風格也支持'\ Q ... \ E'轉義序列,'\ Q'和'\ E'之間的所有字符都被解釋爲文字字符。」_ http://www.regular -expressions.info/characters.html – Wiseguy

+1

你可以使用「Regular Expression Metasyntax」。通常使用的RE的風格是由regex_flavor確定的。但是,這可以由導演前綴覆蓋。如果RE以***開頭,則無論regex_flavor如何,RE的其餘部分都被視爲ARE。如果一個RE以*** =開頭,那麼RE的其餘部分被認爲是一個文字字符串,所有字符都被認爲是普通字符。參考http://www.postgresql.org/docs/8.3/static/functions-matching.html –

回答

1

這種帶有\Q..\E未加引號的子字符串的正則表達式僅由PCRE支持,它在PostgreSQL中本地不可用。

如果你的程序必須處理這種語法在一般情況下,PCRE支持可安裝的擴展,這裏所提供:https://github.com/petere/pgpcre

在另一方面,如果這只是一個正則表達式應該對作出工作,首先 請注意,'\\Qprefix[\\E.+'中的雙反斜槓表示PostgreSQL 9.1及更高版本中的兩個反斜槓,除非standard_conforming_strings明確切換爲OFF。 要對此設置不敏感,使用舊語法的文字預計會以E爲前綴。這在文檔中的String Constants with C-style Escapes中進行了描述。

要簡單地用現代語法匹配prefix[foo]與PostgreSQL的風格的正則表達式,這個工程:

test=> show standard_conforming_strings ; 
standard_conforming_strings 
----------------------------- 
on 
(1 row) 

test=> select 'prefix[foo]' ~ 'prefix\[.+'; 
?column? 
---------- 
t 
(1 row) 
相關問題