2011-09-23 17 views
11

La documentazione dice che \ s è uno spazio bianco e \ S non è uno spazio bianco. Finora, niente di nuovo per regexare gli utenti.Postgees regex: il comportamento di s e S e la classe di caratteri sembra errata

Ma cerchiamo di controllare alcuni valori di ritorno:

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 

così sembra, \ s può essere utilizzato in una classe di caratteri e \ S non può. Perché?

risposta

8

Da the manual:

All'interno espressioni fra parentesi quadre, \ d, \ 's, e \ w perdere le loro staffe esterne, e \ D, \ S, e \ W sono illegali.

In ogni caso, le staffe sembrare ridondante dal \s e \S stessi sono classi di personaggi.

la seguente sintassi funziona per me come alternativa al a[\\S]c:

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

Thx, ho trascurato questo. BTW, ovviamente le parentesi sono ridondanti nel mio codice di esempio semplificato. – Leif

+0

La ragione per cui sono illegali è perché 'a [^ \ s] c' funziona bene per la negazione. – hhaamu

Problemi correlati