SELECT *
FROM `db_apartments_images_links` AS `a1`
JOIN `db_apartments_images_links` AS `a2` ON `a1`.`apartment_id` = `a2`.`apartment_id`
AND `a1`.`image_id` != `a2`.`image_id`
JOIN `db_images` AS `i1` ON `a1`.`image_id` = `i1_image_id`
JOIN `db_images` AS `i2` ON `a2`.`image_id` = `i2`.`image_id`
AND `i1`.`image_hash` = `i2`.`image_hash`
(?<=[а-яё:;,.]) - lookahead (вперёдсмотрящий), перед следующей частью должен быть один из указанных символов, в найденный результат этот символ не включается.
\s* - ноль или более пробельных символов (пробелы, табуляция и т.д.)
• - собственно символ.
То есть получаем любое количество (и нулевое тоже) пробелов, •, но только если перед ними есть один из указанных символов. Заменяем их на '
•'.