2016-10-27 14 views
1

Ich studiere reguläre Ausdrücke und kann nicht herausfinden, was genau das tut. Ich dachte, dass das Caret-Zeichen bedeutet 'nicht gleich', aber in dieser Abfrage unten, ich bin verwirrt:Caret in SQL Reguläre Ausdrücke

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

ERGEBNIS:

CITY Antonio

'San' sollte erfüllen mit [: alpha:] verstehe ich nicht, was die Caret-Funktion hier macht.

Antwort

3

Carrat (^) steht auch für den Anfang der Zeile (und Dollar ($) für sein Ende).

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

Die Negation Funktionalität ist in eckigen Klammern:

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

Caret^(bitte auf die korrekte Schreibweise beachten) bedeutet „am Anfang der Zeichenfolge“, aber nur, wenn es die sehr erstes Zeichen im passenden Muster.

'San' entspricht NICHT [:alpha:], weil [:alpha:] ein einzelnes alphabetisches Zeichen ist. [ ... ] bedeutet "passender Satz" (entspricht exakt EINEM EINZIGEN Zeichen aus den eckigen Klammern). [[:alpha:]] bedeutet ein einzelnes alphabetisches Zeichen. Die + bedeutet "eine oder mehrere" von dem, was ihr vorausgeht, also 'San' entspricht [[:alpha:]]+ am Anfang der Zeichenfolge. 'Antonio' passt auch, aber es ist nicht am Anfang der Zeichenfolge, so dass es nicht ersetzt wird. Wenn Sie das Caret nicht hatten, würden beide Wörter durch CITY ersetzt werden (versuchen Sie es, und Sie werden sehen.)