Oracle Regexp fails in SQL

后端 未结 2 1165
隐瞒了意图╮
隐瞒了意图╮ 2021-01-29 11:20

I am trying to use this regexp statement:

select 1 from dual where regexp_like(\'040\', \'^[\\d\\*]{3}$\');

No output is returned but interest

2条回答
  •  故里飘歌
    2021-01-29 11:59

    In your second example you're using a POSIX character class. In your first example you're mixing POSIX and 'Perl-influenced extensions'. The matching character-list enclosed in [ ... ]:

    Matches any single character in the list within the brackets. The following operators are allowed within the list, but other metacharacters included are treated as literals ...

    So within the [], the backslash metacharacter is treated as a literal backslash, which you're looking for any of the characters \, d or *, and not for a single digit as you expect - the \d just isn't interpreted like that within the brackets. And you don't have any of those literal characters in your sample string, therefore it doesn't find a match.

    Even in your second version, the \* is only going to match those literal characters too, so that isn't adding anything; unless you want to match a value like '12*' or '1\2', which seems unlikely.

    So you may just want the simpler:

    select 1 from dual where regexp_like('040', '^\d{3}$');
    

    or the equivalent:

    select 1 from dual where regexp_like('040', '^[[:digit:]]{3}$');
    

提交回复
热议问题