(The suggested dup talks about word boundaries; this Question is more about backslashes and dot.)
I believe the main confusion has to do with clients turning backslashes and with the regexp processor tossing it when it is irrelevant.
Also, the test case gets confusing because dot matches anything, including dot.
I tested these
SELECT
'468' REGEXP '4.8',
'468' REGEXP '4\.8',
'468' REGEXP '4\\.8', -- fail
'4\.8' REGEXP '4\.8',
'4\.8' REGEXP '4\\.8',
'4\\.8' REGEXP '4\.8', -- fail
'4\\.8' REGEXP '4\\.8', -- fail
'4\\.8' REGEXP '4\\\\.8',
length('4\.8'), -- 3
length('4\\.8'), -- 4
length('4\\\\.8'); -- 5, hence 2 backslashes and a dot
[ 1 1 0 1 1 0 0 1 3 4 5 ]
SELECT
'.' REGEXP '.',
'x' REGEXP '.',
'.' REGEXP '\.',
'x' REGEXP '\.',
'.' REGEXP '\\.',
'x' REGEXP '\\.', -- fail
'\\x' REGEXP '\\.', -- fail
'just dot',
length('.'), -- 1
length('\.'), -- 1, hence dot
length('\\.'); -- 2, hence backslash + dot
[ 1 1 1 1 1 0 0 just dot 1 1 2 ]
Same results on all of these: MariaDB 10.0.28, MariaDB 10.1.43, MariaDB 10.2.30, MariaDB 10.3.21, MySQL 5.5.42, Percona 5.6.22, MySQL 8.0.17, Percona 5.5.45
The client was Perl with DBIx::DWIW, which possibly does the minimal amount of backslash stripping.
They succeed, except as noted. The lengths give a clue of how many backslashes have been stripped by the time MySQL sees it as a string.