2011-07-18 44 views
2

如何在postgres列值中找到像\ u0004或\ u0001這樣的全部空白字符? 它可以在開始,中間或結束。我不想獲得空格(\ u0032)的值,只是包含從\ u0001到\ u0031的空白字符。postgres正則表達式查找chars u0001到 u0031

像下面的東西,但它不正確,它也選擇空間?

select column where column ~* '[\u0001-\u0031]' 

感謝

回答

1

你可能混淆\uwxyz格式十進制基數。請確認Unicode的C0 Controls and Basic Latin圖表。我猜你想C0控制範圍從U + 0001到U + 001F,所以你可以寫:

SELECT E'\u0033 dfgdgdg' ~ E'[\\u0001-\\u001F]' AS isMatch; 

或用八進基地\xyz

SELECT E'\u0033 dfgdgdg' ~ E'[\\001-\\037]' AS isMatch; 

另一個方便的方法是編寫圖案dollar quoting(所以你不需要額外逃避反斜槓):

$$[\u0001-\u001F]$$ 
$$[\x001-\x01f]$$ 
$$[\001-\037]$$ 
+0

爲了完整性,U + 0000-U + FFFF定義爲(BMP)**代碼點**(寫成十六進制數字)。 –

0

一個空白字符爲0x20,而不是0X31。的空白以下Unicode字符範圍wouldbe \u0001\u0019

+0

這將返回true 選擇 '\ u0033 dfgdgdg' 〜* '[\ u0001- \ u0031]' 作爲isMatch; 所以我知道我的查詢不好 – aug70co

+0

@Hyperboreus你對這些條款不正確:** 0x20 **不是唯一的空白字符。 http://en.wikipedia.org/wiki/Whitespace_character – Karolis

1

如果需要,除了正常的空間中的任何空白字符匹配,那麼你可以使用這個表達式:

[^\S ]