如果使用的是Oracle
11g,则可以使用REXEXP_COUNT函数确定与模式匹配的内容。
SQL> select regexp_count('andrew', '[aeiou]', 1, 'i') as vowels 2 from dual; VOWELS---------- 2第一个参数是您要匹配的字符串
'andrew'。
第二个参数是匹配模式,在这种情况下为
[aeiou]。在
[]表示一个字符列表; 解析器以任何顺序匹配此列表中的所有字符。
第三个参数,
1是开始位置,指示Oracle应该在其中开始搜索匹配项的字符串的位置索引。它仅包含在内,因此我可以使用第四个参数。
第四个参数是match参数,
'i'指示我要执行不区分大小写的匹配。这就是为什么字符列表 不 存在的原因
[aeiouAEIOU]。
如果您使用的是10克,则REGEXP_COUNT不存在。在这种情况下,你可以使用更确切版本Annjawan的解决方案与REGEXP_REPLACe。
SQL> select length(regexp_replace('andrew','[^aeiou]', '', 1, 0, 'i')) as vowels 2 from dual; VOWELS---------- 2克拉(
^)表示不是,即用空字符串替换字符串
'andrew'列表中不在字符串中的每个字符
[aeiou]。下一个参数再次是起始位置。第五个参数
0表示您要替换
每次 匹配的模式,并且我再次使用match参数
'i'表示不区分大小写的匹配。
Gaurav的答案不正确。这是因为在字符列表中,他包括了逗号。请记住,如果可用,字符列表中的
所有内容都 将匹配。因此,如果我在您的字符串中引入逗号,则您的字符串中将有3个“元音”:
SQL> select regexp_count('an,drew','[a,e,i,o,u,A,E,I,O,U]' ) as vowels 2 from dual; VOWELS---------- 3正则表达式不是简单的野兽,我会强烈建议你阅读的文档尝试他们的时候。



