Thread

  1. BUG #18870: weird behavior with regexp_replace

    PG Bug reporting form <noreply@postgresql.org> — 2025-03-27T13:43:50Z

    The following bug has been logged on the website:
    
    Bug reference:      18870
    Logged by:          reinko
    Email address:      devops@key2asset.com
    PostgreSQL version: 17.4
    Operating system:   Ubuntu 11.4.0-1ubuntu1~22.04
    Description:        
    
    select regexp_replace(LOWER('Örebro'), '\W', '_', 'g')  in postgres 15 the
    result is örebro which is correct since ö should fit in the \w for a
    regex.
    select regexp_replace(LOWER('Örebro'), '\W', '_', 'g') --> since postgres 17
    the result is _rebro which is incorrect since \w should also contain
    characters like ö, ä, ë.
    
    the to lower is not really relevant to this issue the same happens when it's
    just a direct string aswell.
    this issue happens with alot of special a-z characters é, è have the same
    issue for example.
    
    Kind regards,
    Reinko Brink
    
    
  2. Re: BUG #18870: weird behavior with regexp_replace

    Tom Lane <tgl@sss.pgh.pa.us> — 2025-03-27T21:23:58Z

    PG Bug reporting form <noreply@postgresql.org> writes:
    > select regexp_replace(LOWER('Örebro'), '\W', '_', 'g')  in postgres 15 the
    > result is örebro which is correct since ö should fit in the \w for a
    > regex.
    > select regexp_replace(LOWER('Örebro'), '\W', '_', 'g') --> since postgres 17
    > the result is _rebro which is incorrect since \w should also contain
    > characters like ö, ä, ë.
    
    This most likely indicates that you've got a different database
    collation selected in the v17 installation.  Postgres defers to
    the LC_CTYPE setting (or, in some configurations, the ICU collation)
    to decide what is a letter.  See
    
    https://www.postgresql.org/docs/current/charset.html
    
    psql's "\l" command will give a quick overview of what collations
    you have selected.
    
    			regards, tom lane