我正在研究正则表达式,无法弄清楚这个插入符的确切作用。我认为这个插入符号意味着“不相等”,但在下面的查询中,我很困惑:
SELECT REGEXP_REPLACE('San Antonio', '(^[[:alpha:]]+)', 'CITY') TEST
FROM DUAL;
结果:
CITY Antonio
'San'应该遵守[:alpha:]所以我不明白插入符函数在这里做了什么。
答案 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
(尝试它,您会看到。)