2
我有以下查詢:postgresql中regexp Q ... E的等價物是什麼?
SELECT
field
FROM
myTable
WHERE
field ~ '\\Qprefix[\\E.+'
它不會找到像prefix[foo]
值。
如何更換\Q..\E
?
我有以下查詢:postgresql中regexp Q ... E的等價物是什麼?
SELECT
field
FROM
myTable
WHERE
field ~ '\\Qprefix[\\E.+'
它不會找到像prefix[foo]
值。
如何更換\Q..\E
?
這種帶有\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)
究竟做'\ Q'嗎? –
@a_horse_with_no_name _「許多風格也支持'\ Q ... \ E'轉義序列,'\ Q'和'\ E'之間的所有字符都被解釋爲文字字符。」_ http://www.regular -expressions.info/characters.html – Wiseguy
你可以使用「Regular Expression Metasyntax」。通常使用的RE的風格是由regex_flavor確定的。但是,這可以由導演前綴覆蓋。如果RE以***開頭,則無論regex_flavor如何,RE的其餘部分都被視爲ARE。如果一個RE以*** =開頭,那麼RE的其餘部分被認爲是一個文字字符串,所有字符都被認爲是普通字符。參考http://www.postgresql.org/docs/8.3/static/functions-matching.html –