Soy un usuario ocasional de expresiones regulares, y mi conocimiento de ellas está lejos de ser estelar.
Tengo el siguiente texto en varios centenarios de archivos:
IF EXISTS (SELECT TOP 1 1 FROM sys.objects WHERE object_id=OBJECT_ID(N'[dbo].[B]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[B]
GO
CREATE PROCEDURE [dbo].[A] ...
A los cambios para cada archivo, las tres líneas anteriores fueron insertadas (reemplazar en archivos).
Lo que estoy tratando de lograr es hacer que B se convierta en A en cada archivo. Me gusta:
"blah blah [B] more blah [A1]" => "blah blah [A1] more blah [A1]"
"blah blah [B] more blah [A2]" => "blah blah [A2] more blah [A2]"
...
"blah blah [B] more blah [An]" => "blah blah [An] more blah [An]"
¿Alguien sabe si es posible y cómo hacerlo?
Gracias.
EDITAR. Olvidé decir que antes y después del texto anterior hay otras líneas de código, variable para cada archivo. Este no es el único texto en los archivos.
Al utilizar referencias inversas y desagregación de la expresión coincidente, llegué a una solución de trabajo que, si bien es grande y fea, hace el trabajo perfectamente:
Partido:
(IF EXISTS \(SELECT TOP 1 1 FROM sys\.objects WHERE object_id=OBJECT_ID\(N'\[dbo\]\.)(\[\w+\])('\) AND type in \(N'P', N'PC'\)\)\r\n DROP PROCEDURE \[dbo\]\.)(\[\w+\])(\r\nGO\r\nCREATE PROCEDURE \[dbo\]\.)(\[\w+\])
Reemplazar:
$1$6$3$6$5$6
fuente