2016-10-27 2 views
1

Я изучаю регулярные выражения и не могу понять, что именно делает этот карет. Я думал, что этот символ каретка означает 'не равно', но в этом запросе ниже, я запутался:Caret in SQL Regular Выражения

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

РЕЗУЛЬТАТ:

CITY Антонио

'Сан' должны соответствовать с [: alpha:], поэтому я не понимаю, что здесь делает функция каретки.

ответ

3

Carrat (^) также обозначает начало линии (и доллар ($) для ее конца).

^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

Caret^(обратите внимание на правильное написание) означает, что «в начале строки», но только тогда, когда это очень первый символ в соответствующем шаблоне.

'San' НЕ соответствует [:alpha:], поскольку [:alpha:] является ОДИНОЧНЫМ алфавитным символом. [ ... ] означает «соответствующий набор» (соответствует точно ОДНОМ ОДНОМУ символу тех, что указаны в квадратных скобках). [[:alpha:]] означает любой алфавитный символ. + означает «один или несколько» того, что предшествует ему, поэтому 'San' соответствует [[:alpha:]]+ в начале строки. 'Antonio' также соответствует, но он не находится в начале строки, поэтому он не заменяется. Если у вас не было каретки, оба слова будут заменены на CITY (попробуйте, и вы увидите.)

Смежные вопросы