Add a second check that the email does not match any number of unquoted, non-at characters and then two consecutive dots.
SELECT *
FROM your_table
WHERE REGEXP_LIKE(
email,
-- your regular expression
'^[A-Z0-9][A-Z0-9._%+-]{0,63}@(([A-Z0-9]{1,63})[A-Z0-9]+(-[A-Z0-9]+)*\.){1,8}[A-Z]{2,63}$'
)
AND NOT REGEXP_LIKE( email, '^[^"@]+\.\.' )
However, I feel that you would be better off not using your regular expression (since it does not accept quotes or extended character sets and if you can get it working in Oracle use this one) or, even better, just accepting whatever has been entered and sending a confirmation e-mail to the user as this not-only checks that the e-mail is valid syntactically but also checks that the e-mail exists and that the user wants whatever service you are providing.
Update:
To use the regular expression in the answer linked above:
CREATE TABLE test_data ( id, email ) AS
SELECT 1, 'abc@example.com' FROM DUAL UNION ALL
SELECT 2, 'abc.def@example.com' FROM DUAL UNION ALL
SELECT 3, 'abc..def@example.com' FROM DUAL UNION ALL
SELECT 4, 'abc.def.@example.com' FROM DUAL UNION ALL
SELECT 5, '".abc.."@example.com' FROM DUAL UNION ALL
SELECT 6, 'abc.def++yourdomain.com@example.com' FROM DUAL UNION ALL
SELECT 7, '"with\"quotes\""@example.com' FROM DUAL UNION ALL
SELECT 8, '""@example.com' FROM DUAL UNION ALL
SELECT 9, '"\' || CHR(9) || '"@example.com' FROM DUAL UNION ALL
SELECT 10, '"""@example.com' FROM DUAL UNION ALL
SELECT 11, '123456789.123456789.123456789.123456789.123456789.123456789.1234567890@example.com' FROM DUAL UNION ALL
SELECT 12, 'ABC@example.com' FROM DUAL;
Query:
SELECT *
FROM test_data
WHERE REGEXP_LIKE(
email,
'^('
-- Unquoted local-part
|| '[a-z0-9!#$%&''*+/=?^_{|}~-]+(\.[a-z0-9!#$%&''*+/=?^_{|}~-]+)*'
-- ^^
-- Allow a dot but always expect a
-- non-dot after it.
-- Quoted local-part
|| '|"('
-- Unescaped characters in the quotes
|| '[]' || CHR(1) || '-' || CHR(8) || CHR(11) || CHR(12) || CHR(14) || '-!#-[^-'||CHR(127)||']'
-- Escaped characters in the quotes
|| '|\\[' || CHR(1) || '-' || CHR(9) || CHR(11) || CHR(12) || CHR(14) || '-' || CHR(127) || ']'
|| ')*"'
|| ')'
-- Match at symbol at end of local-part
|| '@',
-- Case insensitive
'i'
)
Output:
ID | EMAIL
-: | :---------------------------------------------------------------------------------
1 | abc@example.com
2 | abc.def@example.com
5 | ".abc.."@example.com
6 | abc.def++yourdomain.com@example.com
7 | "with\"quotes\""@example.com
8 | ""@example.com
9 | "\ "@example.com
11 | 123456789.123456789.123456789.123456789.123456789.123456789.1234567890@example.com
12 | ABC@example.com
db<>fiddle here