I am trying to use this regexp statement:
select 1 from dual where regexp_like(\'040\', \'^[\\d\\*]{3}$\');
No output is returned but interest
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}$');