I think I found a bug in Lua string.patterns, can anyone help see if it's true ?

Domingo Alvarez Duarte <[email protected]> Tue, 12 May 2026 02:22:27 -0700 (PDT)
Newsgroups gmane.comp.lang.lua.general
Message-ID <[email protected]>
While doing some text replacements I found an unexpected behavior that can 
be replicated with this Lua shown bellow, I've tested with Lua 5.1 through 
5.5 and LuaJIT, maybe I'm missing something subtle here, any help is 
welcome.
====
local txt2 = [===[
03.01.411A01.22700      Limpieza y aseo                                     
         1.210.830,00                    0,00                 0,00         
       0,00          1.210.830,00        0,00         1.075.110,90       
88,79         1.021.998,36       84,40          871.196,21       71,95     
     150.802,15         188.831,64




Cuentas Anuales. Ejercicio 2024                                             
                                                                            
                                                                            
                                                                            
                   Pág. 64
                     CUENTAS ANUALES DE LA ADMINISTRACIÓN GENERAL DE LA 
COMUNIDAD DE CASTILLA Y LEÓN. EJERCICIO 2024


EJECUCIÓN DEL PRESUPUESTO DE GASTOS DEL EJERCICIO 2024
GASTOS POR APLICACIÓN
ADMINISTRACIÓN GENERAL                                                     
                                                                            
                                                                            
                                                             A FECHA DE 
31/12/2024
                                     APLICACION                           
 PRESUPUESTO INICIAL        MODIFICACIONES       MODIFICACIONES           
TOTAL            PRESUPUESTO          (2)/(1) %   COMPROMISOS (3)     
 (3)/(2) %    OBLIGACIONES        (4)/(2) %      PAGOS            (5)/(2) % 
  OBLIG.PTES PAGO      REMANENTES DE

                                                                            
       (1)                  POSITIVAS            NEGATIVAS         
 MODIFICACIONES       DEFINITIVO (2)                                       
             RECONOCIDAS (4)                  REALIZADOS (5)               
                           CREDITO


03.01.411A01.22701      Seguridad                                           
             493.750,00                 0,00                 0,00           
      0,00          493.750,00         0,00            40.532,49       
 8,21            40.064,73        8,11           36.164,79        7,32     
       3.899,94          453.685,27


03.01.411A01.22703      Postales                                           
                1.212,00                 0,00                 0,00         
        0,00             1.212,00        0,00             1.208,23       
99,69             1.208,23       99,69            1.208,23       99,69     
           0,00                 3,77


03.01.411A01.22704      Custodia, depósito y almacenaje.                   
              219.293,00                 0,00                 0,00         
        0,00          219.293,00         0,00             4.683,24       
 2,14             4.683,24        2,14            4.683,24        2,14     
           0,00          214.609,76


03.01.411A01.22706      Estudios y trabajos técnicos                       
              257.392,00                 0,00                 0,00         
        0,00          257.392,00         0,00           185.197,25       
71,95           185.197,14       71,95          143.786,77       55,86     
      41.410,37           72.194,86

]===]

local remove_re = [==[



Cuentas Anuales%. Ejercicio %d+                                         
+Pág%. %d+
                     CUENTAS ANUALES DE LA ADMINISTRACIÓN GENERAL DE LA 
COMUNIDAD DE CASTILLA Y LEÓN%. EJERCICIO %d+


EJECUCIÓN DEL PRESUPUESTO DE GASTOS DEL EJERCICIO %d+
GASTOS POR APLICACIÓN
ADMINISTRACIÓN GENERAL[^\n]*
[^\n]+

[^\n]+

]==]

txt2 = txt2:gsub(remove_re, "")
print(txt2)
====
I'm expecting this output:
====
03.01.411A01.22700      Limpieza y aseo                                     
         1.210.830,00                    0,00                 0,00         
       0,00          1.210.830,00        0,00         1.075.110,90       
88,79         1.021.998,36       84,40          871.196,21       71,95     
     150.802,15         188.831,64


03.01.411A01.22701      Seguridad                                           
             493.750,00                 0,00                 0,00           
      0,00          493.750,00         0,00            40.532,49       
 8,21            40.064,73        8,11           36.164,79        7,32     
       3.899,94          453.685,27


03.01.411A01.22703      Postales                                           
                1.212,00                 0,00                 0,00         
        0,00             1.212,00        0,00             1.208,23       
99,69             1.208,23       99,69            1.208,23       99,69     
           0,00                 3,77


03.01.411A01.22704      Custodia, depósito y almacenaje.                   
              219.293,00                 0,00                 0,00         
        0,00          219.293,00         0,00             4.683,24       
 2,14             4.683,24        2,14            4.683,24        2,14     
           0,00          214.609,76


03.01.411A01.22706      Estudios y trabajos técnicos                       
              257.392,00                 0,00                 0,00         
        0,00          257.392,00         0,00           185.197,25       
71,95           185.197,14       71,95          143.786,77       55,86     
      41.410,37           72.194,86
====
but I'm getting this output:
====
03.01.411A01.22700      Limpieza y aseo                                     
         1.210.830,00                    0,00                 0,00         
       0,00          1.210.830,00        0,00         1.075.110,90       
88,79         1.021.998,36       84,40          871.196,21       71,95     
     150.802,15         188.831,64

03.01.411A01.22704      Custodia, depósito y almacenaje.                   
              219.293,00                 0,00                 0,00         
        0,00          219.293,00         0,00             4.683,24       
 2,14             4.683,24        2,14            4.683,24        2,14     
           0,00          214.609,76


03.01.411A01.22706      Estudios y trabajos técnicos                       
              257.392,00                 0,00                 0,00         
        0,00          257.392,00         0,00           185.197,25       
71,95           185.197,14       71,95          143.786,77       55,86     
      41.410,37           72.194,86
====
I've tested with pcre2 and javascript and I do get my expected output with 
this javascript:
====
const str = `
03.01.411A01.22700      Limpieza y aseo                                     
         1.210.830,00                    0,00                 0,00         
       0,00          1.210.830,00        0,00         1.075.110,90       
88,79         1.021.998,36       84,40          871.196,21       71,95     
     150.802,15         188.831,64




Cuentas Anuales. Ejercicio 2024                                             
                                                                            
                                                                            
                                                                            
                   Pág. 64
                     CUENTAS ANUALES DE LA ADMINISTRACIÓN GENERAL DE LA 
COMUNIDAD DE CASTILLA Y LEÓN. EJERCICIO 2024


EJECUCIÓN DEL PRESUPUESTO DE GASTOS DEL EJERCICIO 2024
GASTOS POR APLICACIÓN
ADMINISTRACIÓN GENERAL                                                     
                                                                            
                                                                            
                                                             A FECHA DE 
31/12/2024
                                     APLICACION                           
 PRESUPUESTO INICIAL        MODIFICACIONES       MODIFICACIONES           
TOTAL            PRESUPUESTO          (2)/(1) %   COMPROMISOS (3)     
 (3)/(2) %    OBLIGACIONES        (4)/(2) %      PAGOS            (5)/(2) % 
  OBLIG.PTES PAGO      REMANENTES DE

                                                                            
       (1)                  POSITIVAS            NEGATIVAS         
 MODIFICACIONES       DEFINITIVO (2)                                       
             RECONOCIDAS (4)                  REALIZADOS (5)               
                           CREDITO


03.01.411A01.22701      Seguridad                                           
             493.750,00                 0,00                 0,00           
      0,00          493.750,00         0,00            40.532,49       
 8,21            40.064,73        8,11           36.164,79        7,32     
       3.899,94          453.685,27


03.01.411A01.22703      Postales                                           
                1.212,00                 0,00                 0,00         
        0,00             1.212,00        0,00             1.208,23       
99,69             1.208,23       99,69            1.208,23       99,69     
           0,00                 3,77


03.01.411A01.22704      Custodia, depósito y almacenaje.                   
              219.293,00                 0,00                 0,00         
        0,00          219.293,00         0,00             4.683,24       
 2,14             4.683,24        2,14            4.683,24        2,14     
           0,00          214.609,76


03.01.411A01.22706      Estudios y trabajos técnicos                       
              257.392,00                 0,00                 0,00         
        0,00          257.392,00         0,00           185.197,25       
71,95           185.197,14       71,95          143.786,77       55,86     
      41.410,37           72.194,86
`;

const regex = new RegExp(`


Cuentas Anuales\\. Ejercicio \\d+                                         
+Pág\\. \\d+
                     CUENTAS ANUALES DE LA ADMINISTRACIÓN GENERAL DE LA 
COMUNIDAD DE CASTILLA Y LEÓN\\. EJERCICIO \\d+


EJECUCIÓN DEL PRESUPUESTO DE GASTOS DEL EJERCICIO \\d+
GASTOS POR APLICACIÓN
ADMINISTRACIÓN GENERAL[^\\n]*
[^\\n]+

[^\\n]+

`, 'g')

console.log(str.replaceAll(regex, ""));
====

-- 
You received this message because you are subscribed to the Google Groups "lua-l" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion visit https://groups.google.com/d/msgid/lua-l/eeaad78a-27c0-4020-8f1c-dea4c5a604cdn%40googlegroups.com.