SQL正则表达式中的插入符号

时间:2016-10-27 18:18:50

标签: sql regex oracle

我正在研究正则表达式,无法弄清楚这个插入符的确切作用。我认为这个插入符号意味着“不相等”,但在下面的查询中,我很困惑:

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

结果:

  

CITY Antonio

'San'应该遵守[:alpha:]所以我不明白插入符函数在这里做了什么。

2 个答案:

答案 0 :(得分: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   

答案 1 :(得分:0)

Caret ^(请注意拼写正确)表示“在字符串的开头”,但仅限于匹配模式中的第一个字符。

'San'不符合[:alpha:],因为[:alpha:]是一个单字母字符。 [ ... ]表示“匹配集”(恰好匹配方括号内列出的单个字符)。 [[:alpha:]]表示任何单个字母字符。 +表示其前面的“一个或多个”,因此'San'匹配字符串开头的[[:alpha:]]+'Antonio'也匹配,但它不在字符串的开头,因此不会被替换。如果您没有插入符号,则两个单词都将替换为CITY(尝试它,您会看到。)