2016-10-27 21 views
1

正規表現を調べていて、このキャレットが正確に何をしているのか分からない。私は、このキャレット記号は '等しくない' を意味することを考えたが、以下、このクエリでは、私は混乱しています:SQL正規表現のキャレット

SELECT REGEXP_REPLACE('San Antonio', '(^[[:alpha:]]+)', 'CITY') TEST 
FROM DUAL; 

結果: 'サン' は従わなければならない

CITYアントニオ

[:alpha:]を使って、キャレット関数がここで何をするのか分かりません。

答えて

3

Carrat(^)は、行の先頭(および末尾のDollar($))も表します。

^Hello$ = the word Hello and nothing more 
^Hello.* = something that starts with Hello 

否定機能は、角括弧内にある:

[^0-9] = anything that is not a digit 
[^a-zA-Z] = anything that is not an english letter 
0

キャレット ^(正しいスペルに注意してください)「という文字列の先頭に」意味が、それは非常にある場合にのみ、一致するパターンの最初の文字。 [:alpha:]がSINGLEアルファベット文字であるため、

'San'は、[:alpha:]に準拠していません。 [ ... ]は、 "マッチングセット"(角括弧内にリストされているものの1つの文字に正確にマッチする)を意味します。 [[:alpha:]]は任意の英字を意味します。 +は、先行するものの「1つ以上」を意味します。したがって、'San'は、文字列の先頭に[[:alpha:]]+と一致します。 'Antonio'も一致しますが、文字列の先頭にないため、置き換えられません。キャレットがない場合は、両方の単語がCITYに置き換えられます(試してみてください)