Operaciones matemáticas en expresiones regulares

Necesito agregar un número a una referencia inversa mientras realizo una operación de reemplazo.

P.ej. Estoy reescribiendo una URL

www.site.com/doc.asp?doc=321&language=1

a

www.site.com/headline/100321.article

por ejemplo, haciendo un simple reemplazo pero necesito agregar 100.000 a la id del documento. Lo que tengo a continuación funciona hasta ahora sin agregar nada.

s/.*doc=(\d+).*/www.site.com\/headline\/$1.article/g; 

¿Pero cómo puedo agregar 100,000 a $ 1?

Tenga en cuenta que no puede simplemente agregar ‘100’ antes del número porque la identificación del documento podría ser> 999.

usando Perl:

 s/.*doc=(\d+).*/"www.site.com\/headline\/".($1+100000).".article"/e; 

como ya hiciste con la bandera e, la parte derecha se convierte ahora en una expresión. entonces tiene que envolver la parte que no captura como cadenas.

Eso no es posible en expresiones regulares. Regex solo combina patrones, no hace aritmética.

Lo mejor que puedes hacer es algo muy detallado como:

 match replace (\d{6,}) $1 (\d{5}) 1$1 (\d{4}) 10$1 (\d{3}) 100$1 (\d{2}) 1000$1 (\d) 10000$1 

Si solo tiene algunos artículos, podría simplemente forzarlo brutalmente

 ...doc=322 -> www.site.com/headline/100322.article ...doc=323 -> www.site.com/headline/100323.article ...doc=324 -> www.site.com/headline/100324.article ...etc 

Matemáticas en expresiones regulares, lo ves aquí primero.