The square brackets supply a set of characters to match. This could be a character class (such as :upper: - all uppercase letters) or a range of values (0-9 - the digits between zero and nine).
Regular parentheses mark a group. You have to have an exact match for the characters in the group.
So
[a-z] => any (lowercase) letter from a to z
(a-z) => match the exact string "a-z" (a hyphen z)
select * from (
SELECT 'AAaaanders4n' name
FROM dual
)
where regexp_like (name, '[a-z]{1}');
NAME
AAaaanders4n
select * from (
SELECT 'AAaaanders4n' name
FROM dual
)
where regexp_like (name, '(a-z){1}');
no rows selected