2011-09-23 12 views
11

ドキュメントに\ sが空白で\ Sが空白でないと書かれています。今のところ、正規表現のユーザーにとっては新しいことはありません。 sは文字クラスで使用することができます\、Postgresの正規表現: sと Sの動作と文字クラスが間違っているようです

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 

だからそれはそうとSはできません:\

しかし、のは、いくつかの戻り値をチェックしてみましょう。どうして? the manualから

答えて

8

:ブラケット式内

、\ D、\ Sおよび\その外側ブラケット、 と\ D、\ Sを失うWおよび\ Wは違法です。いずれの場合においても

、ブラケット自体は、文字クラスです\s\Sので、冗長なようです。

次の構文はa[\\S]cの代替として私の作品:

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

Thxを、私はこれを見落とし。もちろん、簡略化されたサンプルコードでは括弧は冗長です。 – Leif

+0

彼らが違法である理由は、 'a [^ \ s] c'が否定のためにうまく動作するからです。 – hhaamu

関連する問題