It means that you are attempting to replace duplicates.
REGEXP_REPLACE(
  comma_separated_list,
  '([^,]+)(,\1)+',
  '\1'
)
Then:
- ([^,]+)will match one-or-more non-comma characters and store the value in a capturing group.
- ,\1will match a comma and then the value from that first capturing group.
- (,\1)+matches a comma and then the value from that first capturing group and matches it all one-or-more times.
However, it does not work reliably. If you have the list 12,123,123,123,123,1234,4444
Then:
- the first match will be: - 12,123,123,123,123,1234,4444
^^^^^
 - at the start and replace it with just - 12giving:
 - 123,123,123,123,1234,4444
^^
 - It has already gone wrong as the match did not match a complete element and you have lost the first - idvalue.
 
- the second match will start after the first match will skip the - 3,characters and match:
 - 123,123,123,123,1234,4444
    ^^^^^^^^^^^^^^^
 - and replace it with - 123giving:
 - 123,1234,4444
    ^^^
 - Again, the match was wrong as it did not match a complete element and it is only coincidence that the value output is correct. 
- and the final match will be: - 123,1234,4444
       ^^^
 - replacing it with just - 4and giving the output:
 - 123,1234444
 - Which is very wrong as you are now missing the - id- 12and have an incorrect- idof- 1234444.
 
What you should probably be doing is filtering the duplicates before aggregating.
In newer Oracle versions it is simply:
SELECT  LISTAGG(DISTINCT ID, ',') WITHIN GROUP (ORDER BY ID)
FROM    TABLE
or in older versions:
SELECT  LISTAGG(ID, ',') WITHIN GROUP (ORDER BY ID)
FROM    (
  SELECT DISTINCT id FROM TABLE
)
If you did want to use regular expressions (which will be a more inefficient  than using DISTINCT) then you can double up the delimiters and ensure you always match complete elements using (,[^,]+,)\1+ but then you also need to remove the repeated delimiters after de-duplication (which makes an inefficient solution even more inefficient):
SELECT  TRIM(
          BOTH ',' FROM
          REPLACE(
            REGEXP_REPLACE(
              LISTAGG(',' || ID || ',') WITHIN GROUP (ORDER BY ID),
              '(,[^,]+,)\1+',
              '\1'
            ),
            ',,',
            ','
          )
        ) AS no_duplicates
FROM    TABLE_NAME
db<>fiddle here