2011-09-23 22 views
11

Dokümantasyonda \ 'nin boşluk olduğunu ve \ S'nin boşluk olmadığını söylüyor. Şimdiye kadar, regex kullanıcıları için yeni bir şey yok. s Bir karakter sınıfında kullanılabilir \,Postgres regex: s ve S davranışı ve karakter sınıfı yanlış görünüyor

SELECT SUBSTRING('abc a c' FROM 'a\\sc'); 
'a c' 

SELECT SUBSTRING('abc a c' FROM 'a[\\s]c'); -- Note the character class 
'a c' 

SELECT SUBSTRING('abc a c' FROM 'a\\Sc'); 
'abc' 

SELECT SUBSTRING('abc a c' FROM 'a[\\S]c'); -- Note the character class 
ERROR: invalid regular expression: invalid escape \ sequence 

Öyle görünüyor ve S olamaz \:

Ama bazı dönüş değerlerini kontrol edelim. Niye ya? the manual kaynaktan

cevap

8

: parantez ifadeleri içinde

, \ d \ s ve \ dış parantez, ve \ D \ S kaybeder w ve \ W, yasadışı. Her durumda

, parantez \s ve \S kendileri karakter sınıfları olduğundan gereksiz görünüyor.

aşağıdaki sözdizimi

a[\\S]c alternatif olarak benim için çalışıyor:

SELECT SUBSTRING('abc a c' FROM 'a[^[:space:]]c'); 
+0

Thx, bu gözden kaçan. BTW, elbette parantezler basitleştirilmiş örnek kodumda gereksizdir. – Leif

+0

Yasadışı olmalarının nedeni, bir [^ \ s] c'nin olumsuzluk için iyi çalıştığıdır. – hhaamu